satellite.tex
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:54k
源码类别:

通讯编程

开发平台:

Visual C++

  1. %documentstyle[11pt,fullpage]{article}
  2. %setlength{parindent}{0 in}
  3. %setlength{parskip}{.1in}
  4. %setlength{topmargin}{-0.5in}
  5. %setlength{textheight}{8.5in}
  6. %begin{document}
  7. chapter{Satellite Networking in ns}
  8. label{chap:satellite}
  9. This chapter describes extensions that enable the simulation of satellite
  10. networks in ns.  In particular, these extensions enable ns~to model
  11. the following:  i) traditional geostationary ``bent-pipe'' satellites with 
  12. multiple users per uplink/downlink and asymmetric links, ii) geostationary 
  13. satellites with processing payloads (either regenerative payloads or full 
  14. packet switching), and iii) polar orbiting LEO constellations such as 
  15. Iridium and Teledesic.  These satellite models are principally aimed at 
  16. using ns~to study networking aspects of satellite systems; in particular, 
  17. MAC, link layer, routing, and transport protocols.  
  18. %paragraph{Notice (caveat emptor)} 
  19. %This code (including perhaps the APIs at OTcl level) is likely to change 
  20. %over the next few months (as of this writing in June 1999) as the ns~
  21. %developers work on integrating the structure of satellite nodes, 
  22. %wireless nodes, hierarchical nodes, etc.  In particular, we plan on
  23. %modifying the code to support mixed-node topologies (e.g., simulations
  24. %consisting of traditional ns~nodes and satellite nodes) and running existing 
  25. %unicast and multicast OTcl-based routing protocols.  nam~~is 
  26. %not currently supported with these extensions.
  27. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  28. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  29. section{Overview of satellite models}
  30. label{sec:satellite/overview}
  31. Exact simulation of satellite networks requires a
  32. detailed modelling of radio frequency characteristics (interference, fading),
  33. protocol interactions (e.g., interactions of residual burst errors on the 
  34. link with error checking codes), and second-order orbital effects (precession,
  35. gravitational anomalies, etc.).  However, in order to study fundamental
  36. characteristics of satellite networks from a {em networking} perspective,
  37. certain features may be abstracted out.  For example, the performance of
  38. TCP over satellite links is impacted little by using an approximate rather than 
  39. detailed channel model-- performance can be characterized to first order
  40. by the overall packet loss probability.  This is the approach taken in this
  41. simulation model-- to create a framework for studying transport, 
  42. routing, and MAC protocols in a satellite environment consisting of
  43. geostationary satellites or constellations of polar-orbiting 
  44. low-earth-orbit (LEO) satellites.  Of course, users may extend these models
  45. to provide more detail at a given layer.   
  46. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  47. subsection{Geostationary satellites}
  48. label{sec:satellite/overview/geo}
  49. Geostationary satellites orbit the Earth at an altitude of 22,300 miles 
  50. above the equator.  The position of the satellites is specified in terms
  51. of the longitude of the nadir point (subsatellite point on the Earth's
  52. surface).  In practice, geostationary satellites can drift from their
  53. designated location due to gravitational perturbations-- these effects
  54. are not modelled in ns.   
  55. Two kinds of geostationary satellites can be modelled.  Traditional
  56. ``bent-pipe'' geostationary satellites are merely repeaters in orbit--
  57. all packets received by such satellites on an uplink channel are piped
  58. through at RF frequencies to a corresponding downlink, and the satellite node
  59. is not visible to routing protocols.   Newer satellites will
  60. increasingly use baseband processing, both to regenerate the digital signal and
  61. to perform fast packet switching on-board
  62. the spacecraft.  In the simulations, these satellites can be modelled more like 
  63. traditional ns~nodes with classifiers and routing agents.  
  64.   
  65. Previously, users could simulate geostationary satellite links by simply
  66. simulating a long delay link using traditional ns~links and nodes.  The
  67. key enhancement of these satellite extensions with respect to geostationary
  68. satellites is the capability to simulate MAC protocols.  Users can now
  69. define many terminals at different locations on the Earth's surface and
  70. connect them to the same satellite uplink and downlink channels, and the
  71. propagation delays in the system (which are slightly different for each
  72. user) are accurately modelled.  In addition, the uplink and downlink channels
  73. can be defined differently (perhaps with different bandwidths or error models).
  74. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  75. subsection{Low-earth-orbiting satellites}
  76. label{sec:satellite/overview/leo}
  77. begin{figure}
  78.     centerline{includegraphics{sat-constellation}}
  79.     caption{Example of a polar-orbiting LEO constellation.  This figure
  80. was generated using the SaVi software package from the geometry center at the
  81. University of Minnesota.}
  82.     label{fig:constellation}
  83. end{figure}
  84. Polar orbiting satellite systems, such as Iridium and the proposed Teledesic 
  85. system, can
  86. be modelled in ns.   In particular, the simulator supports the specification
  87. of satellites that orbit in purely circular planes, for which the neighboring 
  88. planes are co-rotating.
  89. There are other non-geostationary constellation configurations  
  90. possible (e.g., Walker constellations)-- the interested user may develop new
  91. constellation classes to simulate these other constellation types.  In
  92. particular, this would mainly require defining new intersatellite link 
  93. handoff procedures.
  94. The following are the parameters of satellite constellations that can currently
  95. be simulated:
  96. begin{itemize}
  97.         item {bf Basic constellation definition} Includes satellite altitude,
  98. number of satellites, number of planes, number of satellites per plane.
  99.         item {bf Orbits} Orbit inclination can range continuously
  100. from 0 to 180 degrees (inclination greater than 90 degrees corresponds to
  101. retrograde orbits).  Orbit eccentricity is not modeled.  Nodal precession is 
  102. not modeled.  Intersatellite spacing within a given plane is fixed.  Relative
  103. phasing between planes is fixed (although some systems may not control phasing
  104. between planes).
  105.         item {bf Intersatellite (ISL) links} For polar orbiting 
  106. constellations,
  107. intraplane, interplane, and crossseam ISLs can be defined.  Intraplane ISLs
  108. exist between satellites in the same plane and are never deactivated or 
  109. handed off.  Interplane ISLs exist between satellites of neighboring 
  110. co-rotating planes.  These links are deactivated near the poles (above
  111. the ``ISL latitude threshold'' in the table) because the antenna pointing 
  112. mechanism cannot track these links in the polar regions.  Like intraplane ISLs,
  113. interplane ISLs are never handed off.  Crossseam ISLs may exist in a 
  114. constellation between satellites in counter-rotating planes (where the 
  115. planes form a so-called ``seam'' in the topology).   GEO ISLs can also be
  116. defined for constellations of geostationary satellites.
  117.         item {bf Ground to satellite (GSL) links}  Multiple terminals
  118. can be connected to a single GSL satellite channel.  GSL links for GEO 
  119. satellites are static, while GSL links for LEO channels are periodically 
  120. handed off as described below.  
  121.         item {bf Elevation mask} The elevation angle above which a GSL 
  122. link can be operational.  Currently, if the (LEO) satellite serving a terminal
  123. drops below the elevation mask, the terminal searches for a new satellite
  124. above the elevation mask.  Satellite terminals check for handoff opportunities
  125. according to a timeout interval specified by the user.  Each terminal
  126. initiates handoffs asynchronously; it would be possible also to define
  127. a system in which each handoff occurs synchronously in the system.
  128. end{itemize}
  129. The following table lists parameters used for example simulation scripts
  130. of the Iridiumfootnote{Aside
  131. from the link bandwidths (Iridium is a narrowband system only), these
  132. parameters are very close to what a broadband version of the Iridium system
  133. might look like.}  and Teledesicfootnote{These Teledesic constellation 
  134. parameters are subject to change; 
  135. thanks to Marie-Jose Montpetit of Teledesic for providing
  136. tentative parameters as of January 1999.  The link bandwidths are not
  137. necessarily accurate.} systems.
  138. begin{table}[h]
  139. begin{center}
  140. {tt
  141. begin{tabular}{|c||c|c|}hline
  142. & {bf Iridium} & {bf Teledesic}\hlinehline
  143. {bf Altitude} & rm 780 km& rm 1375 km\hline
  144. {bf Planes} & rm 6& rm 12\hline
  145. {bf Satellites per plane} & rm 11 & rm 24\hline
  146. {bf Inclination (deg)} & rm 86.4 & rm 84.7\hline
  147. {bf Interplane separation (deg)} & rm 31.6 & rm 15\hline
  148. {bf Seam separation (deg)} & rm 22 & rm 15\hline
  149. {bf Elevation mask (deg)} & rm 8.2 & rm 40\hline
  150. {bf Intraplane phasing} & rm yes & rm yes\hline
  151. {bf Interplane phasing} & rm yes & rm no\hline
  152. {bf ISLs per satellite} & rm 4  & rm 8\hline
  153. {bf ISL bandwidth} & rm 25 Mb/s  & rm 155 Mb/s\hline
  154. {bf Up/downlink bandwidth} & rm 1.5 Mb/s  & rm 1.5 Mb/s\hline
  155. {bf Cross-seam ISLs} & rm no & rm yes\hline
  156. {bf ISL latitude threshold (deg)} & rm 60 & rm 60\hline
  157. end{tabular}
  158. }
  159. end{center}
  160. caption{Simulation parameters used for modeling a broadband version of
  161. the Iridium system and the proposed 288-satellite Teledesic system.
  162. Both systems are examples of polar orbiting constellations.
  163. }
  164. end{table}
  165. clearpage
  166. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  167. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  168. section{Using the satellite extensions}
  169. label{sec:satellite/usage}
  170. begin{figure}
  171.     centerline{includegraphics{sat-spherical}}
  172.     caption{Spherical coordinate system used by satellite nodes}
  173.     label{fig:spherical}
  174. end{figure}
  175. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  176. subsection{Nodes and node positions}
  177. label{sec:satellite/usage/nodes}
  178. There are two basic kinds of satellite nodes:  {em geostationary}  
  179. and {em non-geostationary} satellite nodes.  In addition, {em terminal} nodes
  180. can be placed on the Earth's surface.  As is explained later in 
  181. Section ref{sec:satellite/implementation},
  182. each of these three different types of nodes is actually implemented with 
  183. the same code{class SatNode} object, but with different position,
  184. handoff manager,  and link objects attached.  
  185. The position object keeps track of the satellite node's location 
  186. in the coordinate system as a function of the elapsed simulation time.
  187. This position information is used to determine link propagation delays and
  188. appropriate times for link handoffs.  Section~ref{sec:node:nodeconfig} 
  189. introduced the 
  190. "node-config" utility used to prime the node generator for different
  191. types of satellite nodes. 
  192. Figure ref{fig:spherical} illustrates the spherical coordinate system,
  193. and the corresponding Cartesian coordinate system.
  194. The coordinate system is centered at the 
  195. Earth's center, and the $z$ axis coincides with the Earth's axis of rotation.  
  196. $(R,theta,phi) = (6378 km, 90^o, 0^o)$ corresponds to $0^o$ longitude 
  197. (prime meridian) on the equator.
  198. Specifically, there is one class of satellite node code{Class Node/SatNode},
  199. to which one of three types of code{Position} objects may be attached.  
  200. Each code{SatNode} and code{Position} object is a split OTcl/C++ object,
  201. but most of the code resides in C++.  The following types of position objects 
  202. exist: 
  203. begin{itemize}
  204. item code{Position/Sat/Term} A terminal is specified by its latitude and
  205. longitude.  Latitude ranges from $[-90, 90]$ and longitude ranges from
  206. $[-180, 180]$, with negative values corresponding to south and west, 
  207. respectively.  As simulation time evolves, the terminals move along
  208. with the Earth's surface.  The  node generator can be used 
  209. to create a terminal with an attached position object as follows:
  210. begin{program}
  211. $ns node-config -satNodeType terminal bs
  212. (other node config commands go here...)
  213. set n1 [$ns node]
  214. $n1 set-position $lat $lon; # in decimal degrees
  215. end{program}
  216. item code{Position/Sat/Geo} A geostationary satellite is specified by its 
  217. longitude above the equator.  As simulation time evolves, the geostationary
  218. satellite moves through the coordinate system with the same orbital period
  219. as that of the Earth's rotation.  The longitude ranges from $[-180,180]$
  220. degrees.  As we describe further below, two flavors of geostationary nodes
  221. exist:  ``geo'' (for processing satellites) and ``geo-repeater'' (for bent-pipe
  222. satellites).  The node generator can be
  223. used to create a geostationary satellite with an attached position object as 
  224. follows:
  225. begin{program}
  226. $ns node-config -satNodeType geo (or ``geo-repeater'') bs
  227. (other node config commands go here...)
  228. set n1 [$ns node]
  229. $n1 set-position $lon; # in decimal degrees
  230. end{program}
  231. item code{Position/Sat/Polar} A polar orbiting satellite has a purely
  232. circular orbit along a fixed plane in the coordinate system; the Earth
  233. rotates underneath this orbital plane, so there is both an east-west and
  234. a north-south component to the track of a polar satellite's footprint on
  235. the Earth's surface.  Strictly speaking, the polar position object can
  236. be used to model the movement of any circular orbit in a fixed plane;  
  237. we use the term ``polar'' here because we later use such satellites to model 
  238. polar-orbiting constellations.
  239. Satellite orbits are usually specified by six parameters:  {em altitude},
  240. {em semi-major axis}, {em eccentricity}, 
  241. {em right ascension of ascending node}, {em inclination}, and
  242. {em time of perigee passage}.  The polar orbiting satellites in ns~have
  243. purely circular orbits, so we simplify the specification of the orbits to
  244. include only three parameters: {em altitude}, {em inclination}, and
  245. {em longitude}, with a fourth parameter {em alpha} specifying initial 
  246. position of the satellite in the orbit, as described below.
  247. {bf Altitude} is specified in kilometers above the Earth's surface, and 
  248. {bf inclination} can range from $[0,180]$ degrees, with $90$ corresponding
  249. to pure polar orbits and angles greater than $90$ degrees corresponding
  250. to ``retrograde'' orbits.  The {em ascending node} refers to the point
  251. where the footprint of the satellite orbital track crosses the equator 
  252. moving from south to north.  In this simulation model, the parameter 
  253. {bf longitude of ascending node} specifies the earth-centric longitude at 
  254. which the satellite's nadir point crosses the equator moving south
  255. to north.footnote{Traditionally, the ``right ascension'' of the ascending
  256. node is specified for satellite orbits-- the right ascension corresponds to the 
  257. {em celestial} longitude.  In our case, we do not care about the
  258. orientation in a celestial coordinate system, so we specify the earth-centric
  259. longitude instead.} {em Longitude of ascending node} can range from 
  260. $[-180,180]$ degrees.  The fourth parameter,
  261. {bf alpha}, specifies the initial position of the satellite along this
  262. orbit, starting from the ascending node.  
  263. For example, an {em alpha} of $180$ degrees indicates that the
  264. satellite is initially above the equator moving from north to south.
  265. {em Alpha} can range from $[0,360]$ degrees.
  266. Finally, a fifth parameter, {bf plane}, is specified when creating
  267. polar satellite nodes-- all satellites in the same plane are given the
  268. same plane index.
  269. The node generator 
  270. used to create a polar satellite with an attached position object as 
  271. follows:
  272. begin{program}
  273. $ns node-config -satNodeType polar bs
  274. (other node config commands go here...)
  275. set n1 [$ns node]
  276. $n1 set-position $alt $inc $lon $alpha $plane
  277. end{program}
  278. end{itemize}
  279. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  280. subsection{Satellite links}
  281. label{sec:satellite/usage/links}
  282. begin{figure}
  283.     centerline{includegraphics{sat-stack-basic}}
  284.     caption{Main components of a satellite network interface}
  285.     label{fig:sat-stack-basic}
  286. end{figure}
  287. Satellite links resemble wireless links, which are described in Chapter
  288. ref{chap:mobility}.  Each satellite
  289. node has one or more satellite network interface stacks, to which
  290. channels are connected to the physical layer object in the stack.  Figure
  291. ref{fig:sat-stack-basic} illustrates the major components.  Satellite
  292. links differ from ns~wireless links in two major respects:  i) the
  293. transmit and receive interfaces must be connected to different channels,
  294. and ii) there is no ARP implementation.  Currently, the {em
  295. Radio Propagation Model} is a placeholder for users to add more detailed
  296. error models if so desired; the current code does not use a propagation
  297. model.
  298. Network interfaces can be added with the following instproc of
  299. code{Class Node/SatNode}:
  300. begin{program}
  301. $node add-interface $type $ll $qtype $qlim $mac $mac_bw $phy
  302. end{program}
  303. The code{add-interface} instproc returns an index value that can be used
  304. to access the network interface stack later in the simulation.  By convention,
  305. the first interface created on a node is attached to the uplink and downlink
  306. channels of a satellite or terminal.  The
  307. following parameters must be provided:
  308. begin{itemize} 
  309. item {bf type}:~~The following link types can be indicated:  
  310. code{geo} or 
  311. code{polar} for links from a terminal to a geo or polar satellite, 
  312. respectively, code{gsl} and code{gsl-repeater} for links from a satellite
  313. to a terminal, and code{intraplane}, code{interplane}, and code{crossseam}
  314. ISLs.  The type field is used internally in the simulator to identify the
  315. different types of links, but structurally they are all very similar.
  316. item {bf ll}:~~The link layer type (code{class LL/Sat} is currently
  317. the only one defined).  
  318. item {bf qtype}:~~The queue type (e.g., code{class Queue/DropTail}).
  319. Any queue type may be used-- however, if additional parameters beyond the
  320. length of the queue are needed, then this instproc may need to be modified
  321. to include more arguments.
  322. item {bf qlim}:~~The length of the interface queue, in packets.
  323. item {bf mac}:~~The MAC type.  Currently, two types are defined:
  324. code{class Mac/Sat}-- a basic MAC for links with only one receiver (i.e.,
  325. it does not do collision detection), and
  326. code{Class Mac/Sat/UnslottedAloha}-- an implementation of unslotted Aloha.
  327. item {bf mac_bw}:~~The bandwidth of the link is set by this 
  328. parameter, which controls the transmission time how fast the MAC sends. The
  329. packet size used to calculate the transmission time is the sum of the
  330. values code{size()} in the common packet header and code{LINK_HDRSIZE},
  331. which is the size of any link layer headers.  The default value for
  332. code{LINK_HDRSIZE} is 16 bytes (settable in code{satlink.h}).
  333. The transmission time is encoded in the packet header for use at the
  334. receive MAC (to simulate waiting for a whole packet to arrive).  
  335. item {bf phy}:~~The physical layer-- currently two Phys 
  336. (code{Class Phy/Sat} and code{Class Phy/Repeater}) are defined.  
  337. The class code{Phy/Sat} just pass the information up and down the stack--
  338. as in the wireless code described in Chapter ref{chap:mobility}, 
  339. a radio propagation model could be attached at this point.  The class
  340. code{Phy/Repeater} pipes any packets received on a receive interface
  341. straight through to a transmit interface.
  342. end{itemize}
  343. An ISL can be added between two nodes using the following instproc:
  344. begin{program}
  345. $ns add-isl $ltype $node1 $node2 $bw $qtype $qlim
  346. end{program}
  347. This creates two channels (of type code{Channel/Sat}), and appropriate
  348. network interfaces on both nodes, and attaches the channels to the 
  349. network interfaces.  The bandwidth of the link is
  350. set to code{bw}.  The linktype (code{ltype})
  351. must be specified as either code{intraplane}, code{interplane}, or 
  352. code{crossseam}.
  353. A GSL involves adding network interfaces and a channel on board the
  354. satellite (this is typically done using the wrapper methods described
  355. in the next paragraph), and then defining the correct interfaces on
  356. the terrestrial node and attaching them to the satellite link, as 
  357. follows:
  358. begin{program}
  359. $node add-gsl $type $ll $qtype $qlim $mac $bw_up $phy bs
  360.    [$node_satellite set downlink_] [$node_satellite set uplink_]
  361. end{program}
  362. Here, the code{type} must be either code{geo} or code{polar}, 
  363. and we make use
  364. of the code{downlink_} and code{uplink_} instvars of the satellite;
  365. therefore, the satellite's uplink and downlink must be created before
  366. this instproc is called.
  367. By default, the node generator for satellite nodes (described in
  368. Section~ref{sec:node:nodeconfig}) will create nodes of a 
  369. given type, give them an uplink and
  370. downlink interface, and create and attach an (initial) uplink and downlink
  371. channel, based on the interface options specified.
  372. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  373. subsection{Handoffs }
  374. label{sec:satellite/usage/handoffs}
  375. Satellite handoff modelling is a key component of LEO satellite network 
  376. simulations.  It is difficult to predict exactly how handoffs will occur
  377. in future LEO systems because the subject is not well treated in the
  378. literature.  In these satellite extensions, we establish certain criteria for 
  379. handoffs, and allow nodes to independently monitor for situations that 
  380. require a handoff.  An alternative would be to have all handoff events
  381. synchronized across the entire simulation-- it would not be difficult to 
  382. change the simulator to work in such a manner.
  383. There are no link handoffs involving geostationary satellites, but there 
  384. are two types of links to polar orbiting satellites
  385. that must be handed off:  GSLs to polar satellites, and crossseam ISLs.  
  386. A third type of link, interplane ISLs, are not handed off but are deactivated
  387. at high latitudes as we describe below.
  388. Each terminal connected to a polar orbiting satellite runs a timer that,
  389. upon expiry, causes the code{HandoffManager} to check whether the current 
  390. satellite has fallen below the
  391. elevation mask of the terminal.  If so, the handoff manager detaches the
  392. terminal from that satellite's up and down links, and searches
  393. through the linked list of satellite nodes for another possible satellite.
  394. First, the ``next'' satellite in the current orbital plane is checked-- a 
  395. pointer to this satellite is stored in the Position object of each
  396. polar satellite node and is set during simulation configuration using
  397. the code{Node/SatNode} instproc ``code{$node set_next $next_node}.''
  398. If the next satellite is not suitable, the handoff manager searches
  399. through the remaining satellites.  If it finds a suitable polar
  400. satelite, it connects its network interfaces to that satellite's uplink and 
  401. downlink channels, and restarts the handoff timer.  If it does not find 
  402. a suitable
  403. satellite, it restarts the timer and tries again later.  If any link
  404. changes occur, the routing agent is notified.
  405. The elevation mask and handoff timer interval are settable via OTcl: 
  406. begin{program}
  407. HandoffManager/Term set elevation_mask_ 10; # degrees
  408. HandoffManager/Term set term_handoff_int_ 10; # seconds
  409. end{program}
  410. In addition, handoffs may be randomized to avoid phase effects by setting
  411. the following variable:
  412. begin{program}
  413. HandoffManager set handoff_randomization_ 0; # 0 is false, 1 is true 
  414. end{program}
  415. If code{handoff_randomization_} is true, then the next handoff interval
  416. is a random variate picked from a uniform distribution across
  417. $(0.5 * term_handoff_int_, 1.5 * term_handoff_int_)$.  
  418. Crossseam ISLs are the only type of ISLs that are handed off.  The criteria
  419. for handing off a crossseam ISL is whether or not there exists a satellite
  420. in the neighboring plane that is closer to the given satellite than the
  421. one to which it is currently connected.  Again, a handoff timer running
  422. within the handoff manager on the polar satellite determines when the
  423. constellation is checked for handoff opportunities.  Crossseam ISL
  424. handoffs are
  425. initiated by satellites in the lower-numbered plane of the two.  It is
  426. therefore possible for a transient condition to arise in which a polar
  427. satellite has two crossseam ISLs (to different satellites).  The
  428. satellite handoff interval is again settable from OTcl and may also be
  429. randomized:
  430. begin{program}
  431. HandoffManager/Sat set sat_handoff_int_ 10; # seconds
  432. end{program}
  433. Interplane and crossseam ISLs are deactivated near the poles, because 
  434. the pointing requirements for the links are too severe as the satellite
  435. draw close to one another.  Shutdown of these links is governed by a parameter:
  436. begin{program}
  437. HandoffManager/Sat set latitude_threshold_ 70; # degrees 
  438. end{program}
  439. The values for this parameter in the example scripts are speculative;
  440. the exact value is dependent upon the satellite hardware.  The handoff
  441. manager checks the latitude of itself and its peer satellite upon a handoff
  442. timeout; if either or both of the satellites is above 
  443. code{latitude_threshold_} degrees latitude (north or south), the link
  444. is deactivated until both satellites drop below this threshold.
  445. Finally, if crossseam ISLs exist, there are certain situations in which
  446. the satellites draw too close to one another in the mid-latitudes (if
  447. the orbits are not close to being pure polar orbits).  We check for
  448. the occurence of this orbital overlap with the following parameter:
  449. begin{program}
  450. HandoffManager/Sat set longitude_threshold_ 10; # degrees 
  451. end{program}
  452. Again, the values for this parameter in the example scripts are speculative.
  453. If the two satellites are closer together in longitude than 
  454. code{longitude_threshold_} degrees, the link between them is deactivated.
  455. This parameter is disabled (set to $0$) by default-- all defaults for
  456. satellite-related bound variables can be found in nsf{tcl/lib/ns-sat.tcl}.
  457. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  458. subsection{Routing }
  459. label{sec:satellite/usage/routing}
  460. The current status of routing is that it is incomplete.  Ideally, one should
  461. be able to run all existing ns~routing protocols over satellite links.  
  462. However,
  463. many of the existing routing protocols implemented in OTcl require that
  464. the conventional ns~links be used.  Contributions in this area are welcome,
  465. but unfortunately it is not a trivial change.
  466. With that being said, the current routing implementation is similar to
  467. Session routing described in Chapter ref{chap:unicast}, except that it
  468. is implemented entirely in C++.   Upon each topology change, a centralized
  469. routing genie determines the global network topology, computes new routes
  470. for all nodes, and uses the routes to build
  471. a forwarding table on each node.  Currently,
  472. the slot table is kept by a routing agent on each node, and packets 
  473. not destined for agents on the node are sent by default to this routing 
  474. agent.  For each destination for which the node has a route, the forwarding
  475. table contains a pointer to the head of the corresponding outgoing link.
  476. As noted in Chapter ref{chap:unicast}, the user is cautioned that this type 
  477. of centralized routing can lead to minor causality violations.
  478. The routing genie is a code{class SatRouteObject} and is created and
  479. invoked with the following OTcl commands:
  480. begin{program}
  481. set satrouteobject_ [new SatRouteObject]
  482. $satrouteobject_ compute_routes
  483. end{program}
  484. where the call to code{compute_routes} is performed after all of the
  485. links and nodes in the simulator have been instantiated.
  486. Like the code{Scheduler}, there is one instance of a SatRouteObject in the
  487. simulation, and it is accessed by means of an instance variable in C++.
  488. For example, the call to recompute routes after a topology change is:
  489. begin{program}
  490. SatRouteObject::instance().recompute();
  491. end{program}
  492. Despite the current use of centralized routing, the design of having
  493. a routing agent on each node was mainly done with distributed routing 
  494. in mind.  Routing packets can be sent to port 255 of each node.  The key
  495. to distributed routing working correctly is for the routing agent to
  496. be able to 
  497. determine from which link a packet arrived.  This is accomplished by the
  498. inclusion of a code{class NetworkInterface} object in each link, which
  499. uniquely labels the link on which the packet arrived.  A helper function
  500. code{NsObject* intf_to_target(int label)} can be used to return the head 
  501. of the
  502. link corresponding to a given label.  The use of routing agents parallels
  503. that of the mobility extensions, and the interested reader can turn to
  504. those examples to see how to implement distributed routing protocols in
  505. this framework.
  506. The shortest-path route computations use the current propagation delay of
  507. a link as the cost metric.  It is possible to compute routes using only
  508. the hop count and not the propagation delays; in order to do so, set
  509. the following default variable to "false":
  510. begin{program}
  511. SatRouteObject set metric_delay_ "true"
  512. end{program}
  513. Finally, for very large topologies (such as the Teledesic example), the 
  514. centralized routing code will produce a very slow runtime because it executes
  515. an all-pairs shortest path algorithm upon each topology change even if
  516. there is no data currently being sent.  To speed up simulations in which
  517. there is not much data transfer but there are lots of satellites and
  518. ISLs, one can disable {em handoff-driven} and enable {em data-driven} 
  519. route computations.  With data-driven computations, routes are computed
  520. only when there is a packet to send, and furthermore, a single-source
  521. shortest-path algorithm (only for the node with a packet to send) is 
  522. executed instead of an all-pairs shortest path algorithm.  The following
  523. OTcl variable can configure this option (which is set to "false" by
  524. default):
  525. begin{program}
  526. SatRouteObject set data_driven_computation_ "false"
  527. end{program}
  528. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  529. subsection{Trace support}
  530. label{sec:satellite/usage/trace}
  531. Tracefiles using satellite nodes and links are very similar to conventional
  532. ns~tracing described in Chapter ref{chap:trace}.  Special SatTrace objects
  533. (code{class SatTrace} derives from code{class Trace}) are used
  534. to log the geographic latitude and longitude of the node logging the trace
  535. (in the case of a satellite node, the latitude and longitude correspond
  536. to the nadir point of the satellite).
  537. For example, a packet on a link from node 66 to node 26 might normally be
  538. logged as:  
  539. begin{program}
  540. + 1.0000 66 26 cbr 210 ------- 0 66.0 67.0 0 0 
  541. end{program}
  542. but in the satellite simulation, the position information is appended:
  543. begin{program}
  544. + 1.0000 66 26 cbr 210 ------- 0 66.0 67.0 0 0 37.90 -122.30 48.90 -120.94
  545. end{program}
  546. In this case, node 66 is at latitude 37.90 degrees, longitude -122.30
  547. degrees, while node 26 is a LEO satellite whose subsatellite
  548. point is at 48.90 degrees latitude, -120.94 degrees longitude (negative
  549. latitude corresponds to south, while negative longitude corresponds to
  550. west).
  551. One addition is the code{Class Trace/Sat/Error}, which traces any packets
  552. that are errored by an error model.  The error trace logs packets dropped
  553. due to errors as follows, for example:  
  554. begin{program}
  555. e 1.2404 12 13 cbr 210 ------- 0 12.0 13.0 0 0 -0.00 10.20 -0.00 -10.00
  556. end{program}
  557. It may happen that a satellite node generates a packet that it cannot
  558. forward (such as in sat-mixed.tcl).  This will show up as a drop in
  559. the tracefile with a destination field set to -2, and the coordinates
  560. set to -999.00:
  561. begin{program}
  562. d 848.0000 14 -2 cbr 210 ------- 1 14.0 15.0 6 21 0.00 10.00 -999.00 -999.00 
  563. end{program}
  564. This indicates that node 14, in trying to send a packet to node 15, could
  565. not find an available route.
  566. To enable tracing of all satellite links in the simulator, use the following
  567. commands {em before} instantiating nodes and links:
  568. begin{program}
  569. set f [open out.tr w]
  570. $ns trace-all $f
  571. end{program}
  572. Then use the following line after all node and link creation (and all
  573. error model insertion, if any) to enable tracing of all satellite links:
  574. begin{program}
  575. $ns trace-all-satlinks $f
  576. end{program}
  577. Specifically, this will put tracing around the link layer queues in all
  578. satellite links, and will put a receive trace between the mac and the
  579. link layer for received packets.  To enable tracing only on a specific
  580. link on a specific node, one may use the command:
  581. begin{program}
  582. $node trace-inlink-queue $f $i
  583. $node trace-outlink-queue $f $i
  584. end{program}
  585. where $i$ is the index of the interface to be traced.  
  586. The implementations of the satellite trace objects can be found in 
  587. nsf{tcl/lib/ns-sat.tcl} and nsf{sattrace.{cc,h}}.
  588. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  589. subsection{Error models}
  590. label{sec:satellite/usage/error}
  591. ns~error models are described in Chapter ref{chap:error_model}.  These
  592. error models can be set to cause packets to be errored according to various
  593. probability distributions.  These error models are simple and don't 
  594. necessarily correspond to what would be experienced on an actual satellite
  595. channel (particularly a LEO channel).  Users are 
  596. free to define more sophisticated error models that more closely match a 
  597. particular satellite environment.
  598. The following code provides an example of how to add an error model to a
  599. link:
  600. begin{program}
  601. set em_ [new ErrorModel]
  602. $em_ unit pkt
  603. $em_ set rate_ 0.02
  604. $em_ ranvar [new RandomVariable/Uniform]
  605. $node interface-errormodel $em_ 
  606. end{program}
  607. This will add an error model to the receive path of the first interface
  608. created on node code{$node} (specifically, between the MAC and link layer)--
  609. this first interface generally corresponds to the uplink and downlink
  610. interface for a satellite or a terminal (if only one uplink and/or downlink
  611. exists).
  612. To add the error model to a different stack (indexed by $i$), use the 
  613. following code:
  614. begin{program}
  615. $node interface-errormodel $em_ $i 
  616. end{program}
  617. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  618. subsection{Other configuration options}
  619. label{sec:satellite/usage/other}
  620. Given an initial configuration of satellites specified for time $0$, 
  621. it is possible to start the 
  622. satellite configuration from any arbitrary point in time through the use of the
  623. code{time_advance_} parameter (this is really only useful for LEO
  624. simulations). During the simulation run, this will set the position of 
  625. the object to the position at time
  626. code{Scheduler::instance().clock + time_advance_} seconds.
  627. begin{program}
  628. Position/Sat set time_advance_ 0; # seconds          
  629. end{program}
  630. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  631. subsection{nam~~support}
  632. label{sec:satellite/usage/nam}
  633. nam~~is not currently supported.  Addition of nam~~ for satellite
  634. is open to interested contributors.
  635. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  636. subsection{Integration with wired and wireless code}
  637. label{sec:satellite/usage/integration}
  638. Recently (November 2001), support has been added to connect traditional
  639. OTcl-based wired nodes with the satellite nodes.  This section describes
  640. the capabilities and limitations of that code.
  641. The satellite code (and the wireless code) normally performs all routing 
  642. in C++, while the traditional ns code uses a mix of OTcl and C++ code.   
  643. For backward compatibility reasons, it is difficult to fully integrate
  644. both the wired and wireless code.   The strategy for integrating wireless 
  645. and wired code has been to define a special gateway node (called a 
  646. "basestation"), to use hierarchial routing, and to locate a single basestation 
  647. node in the wireless network with a network stack located in both the
  648. wireless and the wired subnet.  Because routing is not fully integrated, 
  649. the topology of the simulation is limited to only one gateway node per
  650. wireless subnet (i.e., a packet cannot enter the wireless network from 
  651. one wired gateway and leave via another).
  652. The satellite/wired code integration takes a different strategy.  By
  653. selecting the node configuration
  654. code{$ns node-config -wiredRouting ON} option, the C++
  655. routing in the satellite code is turned off, and instead, all satellite 
  656. topology changes lead to upcalls into the OTcl code.  As a result, 
  657. the code{link_} array in OTcl is manipulated according to all topology 
  658. changes, and OTcl-based routing can occur.  The penalty for doing this 
  659. is a much longer execution time for larger simulations (such as Teledesic), 
  660. but for smaller simulations, the difference is not as noticeable.
  661. An example script detailing the use of this new option is shown in
  662. nsf{tcl/ex/sat-wired.tcl}, and a similar test in the satellite test suite
  663. exercises this code.  Additionally, all of the satellite example scripts
  664. in nsf{tcl/ex} directory can be converted to OTcl routing by using the 
  665. code{$ns node-config -wiredRouting ON} option.  However, there are a
  666. few caveats: 
  667. begin{itemize}
  668. item The wired routing option for satellite has only been tested with
  669. (the default) static routing: code{$ns rtProto Static}.  The code triggers
  670. a global routing table update upon any satellite topology change.
  671. item The option code{data_driven_computation_}
  672. can not be set to ``true'' when wiredRouting is ON.  Note that the enabling
  673. or disabling of code{data_driven_computation_}  can give subtle differences 
  674. in simulation output since routes are computed at different times (while
  675. propagation delays are continuously changing).  This effect can be seen
  676. by toggling this parameter in the Iridium example 
  677. script nsf{tcl/ex/sat-iridium.tcl}.
  678. item In the trace file, when a packet is dropped due to ``no route to
  679. host'' (such as when there is a topology change), the trace looks a bit
  680. different depending on whether wiredRouting is turned OFF or ON.  In the
  681. former case, there is one line per drop, with the destination labelled
  682. as ``-2''.  In the latter case, there are three events (enque ``+'', 
  683. deque ``-'', and drop ``d'') corresponding to the same packet, and the
  684. destination is shown as ``-1''.  
  685. item In rare cases, there may be warning messages during the execution
  686. indicating ``node out of range.''  This can occur if a node becomes
  687. disconnected in the topology and then another node tries to send a packet
  688. to it.  For example, try enabling code{wiredRouting} in the file
  689. nsf{tcl/ex/sat-mixed.tcl}.  This occurs because the routing table is
  690. dynamically sized upon topology change, and if a node becomes disconnected  
  691. it may not have any entries inserted in the routing table (and hence
  692. the routing table is not grown to accommodate its node number).  This
  693. warning should not affect actual trace output.
  694. item There has been no attempt to interoperate with wireless or 
  695. mobile-IP code.
  696. end{itemize}
  697.  
  698. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  699. subsection{Example scripts}
  700. label{sec:satellite/usage/example}
  701. Example scripts can be found in the nsf{tcl/ex} directory, including:
  702. begin{itemize}
  703. item code{sat-mixed.tcl}  A simulation with a mixture of polar and
  704. geostationary satellites.
  705. item code{sat-wired.tcl}  Similar to the previous script, but shows how
  706. to connect wired nodes to a satellite simulation.
  707. item code{sat-repeater.tcl}  Demonstrates the use of a simple bent-pipe
  708. geostationary satellite, and also error models.
  709. item code{sat-aloha.tcl}  Simulates one hundred terminals in a mesh-VSAT
  710. configuration using an unslotted Aloha MAC protocol 
  711. with a ``bent-pipe'' geostationary satellite.  Terminals listen to their
  712. own transmissions (after a delay), and if they do not successfully receive
  713. their own packet within a timeout interval, they perform exponential 
  714. backoff and then retransmit the packet. Three variants exist:
  715. code{basic}, code{basic_tracing}, and code{poisson}.  These variants
  716. are described further in the header comments of the script.
  717. item code{sat-iridium.tcl}  Simulates a broadband LEO constellation with
  718. parameters similar to that of the Iridium constellation (with supporting
  719. scripts code{sat-iridium-links.tcl}, code{sat-iridium-linkswithcross.tcl}, 
  720. and code{sat-iridium-nodes.tcl}).
  721. item code{sat-teledesic.tcl}  Simulates a broadband LEO constellation with
  722. parameters similar to those proposed for the 288 satellite Teledesic
  723. constellation (with supporting scripts code{sat-teledesic-links.tcl} and 
  724. code{sat-teledesic-nodes.tcl}).
  725. end{itemize}
  726. In addition, there is a test suite script that tries to exercise a lot
  727. of features simultaneously, it can be found at nsf{tcl/test/test-suite-sat.tcl}.
  728. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  729. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  730. section{Implementation}
  731. label{sec:satellite/implementation}
  732. The code for the implementation of satellite extensions can be found
  733. in nsf{{sat.h, sathandoff.{cc,h}, satlink.{cc,h}, satnode.{cc,h}, 
  734. satposition.{cc,h}, satroute.{cc,h}, sattrace.{cc,h}}}, and
  735. nsf{tcl/lib/ns-sat.tcl}.  Almost all of the mechanism is implemented
  736. in C++.
  737. In this section, we focus on some of the key components of the implementation;
  738. namely, the use of linked lists, the node structure, and a detailed look
  739. at the satellite link structure.
  740. subsection{Use of linked lists}
  741. label{sec:satellite/implementation/list}
  742. begin{figure}
  743.     centerline{includegraphics{linked-list}}
  744.     caption{Linked list implementation in ns.}
  745.     label{fig:linked-list}
  746. end{figure}
  747. There are a number of linked lists used heavily in the implementation:
  748. begin{itemize}
  749. item code{class Node} maintains a (static) list of all objects of class
  750. code{Node} in the simulator.  The variable code{Node::nodehead_} stores
  751. the head of the list.  The linked list of nodes is used for centralized
  752. routing, for finding satellites to hand off to, and for tracing.
  753. item code{class Node} maintains a list of all (satellite) links on the
  754. node.  Specifically, the list is a list of objects of class code{LinkHead}. 
  755. The variable code{linklisthead_} stores the head of the list.  The
  756. linked list of LinkHeads is used for checking whether or not to handoff
  757. links, and to discover topology adjacencies.
  758. item code{class Channel} maintains a list of all objects of class
  759. code{Phy} on the channel.  The head of the list is stored in the variable
  760. code{if_head_}.  This list is used to determine the set of interfaces on a
  761. channel that should receive a copy of a packet.
  762. end{itemize}
  763. Figure ref{fig:linked-list} provides a schematic of how the linked list
  764. is organized.  Each object in the list is linked through a ``LINK_ENTRY''
  765. that is a protected member of the class.  This entry contains a pointer
  766. to the next item in the list and also a pointer to the address of the
  767. previous ``next'' pointer in the preceding object.   Various macros
  768. found in nsf{list.h} can be used to manipulate the list; the 
  769. implementation of linked-lists in ns~is similar to the code{queue} 
  770. implementation found in some variants of BSD UNIX.
  771. subsection{Node structure}
  772. begin{figure}
  773.     centerline{includegraphics{sat-node}}
  774.     caption{Structure of code{class SatNode}.}
  775.     label{fig:sat-node}
  776. end{figure}
  777. Figure ref{fig:sat-node} is a schematic of the main components of a
  778. code{SatNode}.  The structure bears resemblance to the code{MobileNode}
  779. in the wireless extensions, but there are several differences.  Like all
  780. ns~nodes, the SatNode has an ``entry'' point to a series of classifiers.
  781. The address classifier contains a slot table for forwarding packets to 
  782. foreign nodes, but since OTcl routing is not used, all packets not destined
  783. for this node (and hence forwarded to the port classifier), are sent to
  784. the default target, which points to a routing agent.  Packets destined
  785. on the node for port 255 are classified as routing packets and are also
  786. forwarded to the routing agent.
  787. Each node contains one or more ``network stacks'' that include a generic
  788. code{SatLinkHead} at the entry point of the link.  The code{SatLinkHead}
  789. is intended to serve as an API to get at other objects in the link structure,
  790. so it contains a number of pointers (although the API here has not been
  791. finalized).  Packets leaving the network stack are sent to the node's
  792. entry.  An important feature is that each packet leaving a network stack
  793. has its code{iface_} field in the common packet header coded with the
  794. unique code{NetworkInterface} index corresponding to the link.  This value
  795. can be used to support distributed routing as described below.
  796. The base class routing agent is code{class SatRouteAgent}; it can be used 
  797. in conjunction with centralized routing.  SatRouteAgents contain
  798. a forwarding table that resolves a packet's address to a particular 
  799. LinkHead target-- it is the job of the code{SatRouteObject} to populate this
  800. table correctly.  The SatRouteAgent populates certain fields in the header
  801. and then sends the packet down to the approprate link.  To implement
  802. a distributed routing protocol, a new SatRouteAgent could be defined-- this
  803. would learn about topology by noting the interface index marked in each 
  804. packet as it came up the stack-- a helper function in the node 
  805. code{intf_to_target()} allows it to resolve an index value to
  806. a particular LinkHead. 
  807. There are pointers to three additional objects in a SatNode.  First,
  808. each SatNode contains a position object, discussed in the previous section.
  809. Second, each SatNode contains a code{LinkHandoffMgr} that monitors
  810. for opportunities to hand links off and coordinates the handoffs.  Satellite
  811. nodes and terminal nodes each have their specialized version of a 
  812. LinkHandoffMgr.
  813. Finally, a number of pointers to objects are contained in a SatNode.  We
  814. discussed code{linklisthead_} and code{nodehead_} in the previous 
  815. subsection.  The code{uplink_} and code{downlink_} pointers are
  816. used for convenience under the assumption that, in most simulations,
  817. a satellite or a terminal has only one uplink and downlink channel.
  818. subsection{Detailed look at satellite links}
  819. begin{figure}
  820.     centerline{includegraphics{sat-stack}}
  821.     caption{Detailed look at network interface stack.}
  822.     label{fig:sat-stack}
  823. end{figure}
  824. Figure ref{fig:sat-stack} provides a more detailed look at how satellite links
  825. are composed.  In this section, we describe how packets move up and down
  826. the stack, and the key things to note at each layer.  The file 
  827. nsf{tcl/lib/ns-sat.tcl} contains the various OTcl instprocs that assemble
  828. links according to Figure ref{fig:sat-stack}.  We describe the composite
  829. structure herein as a ``network stack.''  Most of the code for the
  830. various link components is in nsf{satlink.{cc,h}}.
  831. The entry point to a network stack is the code{SatLinkHead} object.  The
  832. SatLinkHead object derives from code{Class LinkHead}; the aim of link
  833. head objects is to provide a uniform API for all network stacks.
  834. footnote{In the author's opinion, all network stacks in ns~ should 
  835. eventually have a LinkHead object at the front-- the class SatLinkHead 
  836. would then disappear.}  The SatLinkHead object contains pointers to
  837. the LL, Queue, MAC, Error model, and both Phy objects.  The SatLinkHead
  838. object can also be queried as to what type of network stack it is-- e.g.,
  839. GSL, interplane ISL, crossseam ISL, etc..  Valid codes for the code{type_} 
  840. field are currently found in nsf{sat.h}.  Finally, the SatLinkHead
  841. stores a boolean variable code{linkup_} that indicates whether
  842. the link to at least one other node on the channel is up.  The C++
  843. implementation of SatLinkHead is found in nsf{satlink.{cc,h}}.
  844. Packets leaving a node pass through the SatLinkHead transparently to the 
  845. code{class SatLL} object.  The SatLL class derives from LL (link layer).
  846. Link layer protocols (like ARQ protocols) can be defined here.  The current
  847. SatLL assigns a MAC address to the packet.  Note that in the satellite case,
  848. we do not use an Address Resolution Protocol (ARP); instead, we simply use
  849. the MAC code{index_} variable as its address, and we use a helper function
  850. to find the MAC address of the corresponding interface of the next-hop node.  
  851. Since code{class LL} derives from code{class LinkDelay}, the code{delay_}
  852. parameter of LinkDelay can be used to model any processing delay in the
  853. link layer; by default this delay is zero.
  854. The next object an outgoing packet encounters is the interface queue.  
  855. However, if tracing is enabled, tracing elements may surround the
  856. queue, as shown in Figure ref{fig:sat-stack}.  This part of a satellite
  857. link functions like a conventional ns~ link.
  858. The next layer down is the MAC layer.  The MAC layer draws packets from
  859. the queue (or deque trace) object-- a handshaking between the MAC and the 
  860. queue allows the MAC to draw packets out of the queue as it needs them.  The
  861. transmission time of a packet is modelled in the MAC also-- the MAC computes
  862. the transmission delay of the packet (based on the sum of the 
  863. LINK_HDRSIZE field defined in code{satlink.h} and the code{size} field 
  864. in the common packet header), and does not call up for another packet until
  865. the current one has been ``sent'' to the next layer down.  Therefore, it
  866. is important to set the bandwidth of the link correctly at this layer.
  867. For convenience, the transmit time is encoded in the code{mac} header; this
  868. information can be used at the receiving MAC to calculate how long it must
  869. wait to detect a collision on a packet, for example.
  870. Next, the packet is sent to a transmitting interface (Phy_tx) of class 
  871. code{SatPhy}.  This
  872. object just sends the packet to the attached channel.  We noted earlier
  873. in this chapter that all interfaces attached to a channel are part of the
  874. linked list for that channel.  This is not true for transmit interfaces,
  875. however.  Only receive interfaces attached to a channel comprise this linked
  876. list, since only receive interfaces should get a copy of transmitted packets.
  877. The use of separate transmit and receive interfaces mirrors the real world
  878. where full-duplex satellite links are made up of RF channels at different
  879. frequencies.
  880. The outgoing packet is next sent to a code{SatChannel}, which copies the
  881. packet to every receiving interface (of class code{SatPhy}) on the channel. 
  882. The Phy_rx sends the packet to the MAC layer.  At the MAC layer, the packet
  883. is held for the duration of its transmission time (and any appropriate
  884. collision detection is performed if the MAC, such as the Aloha MAC,
  885. supports it).  If the packet is determined to have arrived safely at the MAC,
  886. it next passes to an code{ErrorModel} object, if it exists.  If not, the
  887. packet moves through any receive tracing objects to the code{SatLL}
  888. object.  The SatLL object passes the packet up after a processing delay
  889. (again, by default, the value for code{delay_} is zero).
  890. The final object that a received packet passes through is an object of
  891. code{class NetworkInterface}.  This object stamps the code{iface_} field
  892. in the common header with the network stack's unique index value.  This
  893. is used to keep track of which network stack a packet arrived on.  The
  894. packet then goes to the code{entry} of the SatNode (usually, an address
  895. classifier).  
  896. Finally, ``geo-repeater'' satellites exist, as described earlier in this
  897. chapter.  Geo-repeater network stacks are very simple-- they only contain
  898. a Phy_tx and a Phy_rx of code{class RepeaterPhy}, and a SatLinkHead.  
  899. Packets received by a Phy_rx are sent to the Phy_tx without delay.  The
  900. geo-repeater satellite is a degenerate satellite node, in that it does not
  901. contain things like tracing elements, handoff managers, routing agents, or 
  902. any other link interfaces other than repeater interfaces.
  903. section{Commands at a glance}
  904. label{sec:satcommands}
  905. Following is a list of commands related to satellite networking:
  906. begin{flushleft}
  907. code{$ns_ node-config -satNodeType <type>}\
  908. This node configuration declares that the subsequent new nodes created
  909. will be of type <type>, where <type> can be one of the following:
  910. code{geo, geo-repeater, polar, terminal}.  Other required fields for
  911. satellite nodes (for setting up initial links and channels) are as follows 
  912. (see Section~ref{sec:node:nodeconfig}):
  913. code{$ns_ node-config -llType <type>}\
  914. code{$ns_ node-config -ifqType <type>}\
  915. code{$ns_ node-config -ifqLen <length>}\
  916. code{$ns_ node-config -macType <type>}\
  917. code{$ns_ node-config -channelType <type>}\
  918. code{$ns_ node-config -downlinkBW <value>}\
  919. (note-- satNodeType geo-repeater only requires specifying the channelType-- all other options are disregarded.  See code{tcl/ex/sat-repeater.tcl} for an example.)
  920. code{$ns_ satnode-polar <alt> <inc> <lon> <alpha> <plane> <linkargs> <chan>}\
  921. This a simulator wrapper method for creating a polar satellite node. Two
  922. links, uplink and downlink, are created along with two channels, uplink
  923. channel and downlink channel. <alt> is the polar satellite altitude,
  924. <inc> is orbit inclination w.r.t equator, <lon> is the longitude of 
  925. ascending node, <alpha>
  926. gives the initial position of the satellite along this orbit, <plane> 
  927. defines the plane of
  928. the polar satellite. <linkargs> is a list of link argument options that
  929. defines the network interface (like LL, Qtype, Qlim, PHY, MAC etc).
  930. code{$ns_ satnode-geo <lon> <linkargs> <chan>}\
  931. This is a wrapper method for creating a geo satellite node that first
  932. creates a satnode plus two link interfaces (uplink and downlink) plus two 
  933. satellite channels (uplink and downlink). <chan> defines the type of
  934. channel.
  935. code{$ns_ satnode-geo-repeater <lon> <chan>}\
  936. This is a wrapper method for making a geo satellite repeater node that 
  937. first creates a satnode plus two link interfaces (uplink and downlink)
  938. plus two satellite channels (uplink and downlink). 
  939. code{$ns_ satnode-terminal <lat> <lon>}\
  940. This is a wrapper method that simply creates a terminal node. The <lat>
  941. and <lon> defines the latitude and longitude respectively of the terminal.
  942. code{$ns_ satnode <type> <args>}\
  943. This is a more primitive method for creating satnodes of type <type>
  944. which can be polar, geo or terminal. 
  945. code{$satnode add-interface <type> <ll> <qtype> <qlim> <mac_bw> <phy>}\
  946. This is an internal method of Node/SatNode that sets up link layer, mac
  947. layer, interface queue and physical layer structures for the satellite
  948. nodes.
  949. code{$satnode add-isl <ltype> <node1> <node2> <bw> <qtype> <qlim>}\
  950. This method creates an ISL (inter-satellite link) between the two nodes.
  951. The link type (inter, intra or cross-seam), BW of the link, the queue-type
  952. and queue-limit are all specified.
  953. code{$satnode add-gsl <ltype> <opt_ll> <opt_ifq> <opt_qlim> <opt_mac> <opt_bw> <opt_phy> <opt_inlink> <opt_outlink>}\
  954. This method creates a GSL (ground to satellite link). First a network
  955. stack is created that is defined by LL, IfQ, Qlim, MAC, BW and PHY layers.
  956. Next the node is attached to the channel inlink and outlink.
  957. end{flushleft}
  958. endinput