IP.4
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:36k
源码类别:

操作系统开发

开发平台:

C/C++

  1. ."
  2. ." Copyright 1994 Vrije Universiteit, The Netherlands.
  3. ." For full copyright and restrictions on use see the file COPYRIGHT in the
  4. ." top level of the Amoeba distribution.
  5. ."
  6. .ig
  7. Software: Philip Homburg, 1991
  8. Document: Philip Homburg, Sept 3, 1991
  9. Modified: Greg Sharp and Philip Homburg, March 1992
  10.   - merged with udp(L) and made a little more complete.
  11.   Greg Sharp, April 1992
  12.   - updated keywords for auto index generation
  13. Modified: Kees J. Bot, June 1994
  14.   - changed to man(7) format for Minix.
  15. ..
  16. .TH IP 4
  17. .SH NAME
  18. ip, eth, psip, udp, tcp - Internet Protocol server devices and definitions
  19. .SH DESCRIPTION
  20. .de SP
  21. .if t .sp 0.4
  22. .if n .sp
  23. ..
  24. The
  25. .BR ip* ,
  26. .BR eth* ,
  27. .BR psip* ,
  28. .BR tcp* ,
  29. and
  30. .B udp*
  31. devices give access to the Internet Protocol (IP) services in Minix.
  32. There are 16 such devices for four different networks, and four
  33. different ways of accessing them.  The
  34. .B eth*
  35. and
  36. .B psip*
  37. devices give direct access to the network packets at the lowest level.
  38. The
  39. .BR ip* ,
  40. .BR tcp* ,
  41. and
  42. .B udp*
  43. devices give access to IP, TCP, or UDP services.  See
  44. .BR set_net_default (8)
  45. for a description of the default network devices and environment
  46. variables.  The proper TCP device to use for instance is found by:
  47. .PP
  48. .RS
  49. .nf
  50. if ((tcp_device= getenv("TCP_DEVICE")) == NULL)
  51. tcp_device= "/dev/tcp";
  52. .fi
  53. .RE
  54. .PP
  55. Access to the IP services is provided using filedescriptors to open IP
  56. devices.  These open IP channels can be configured with
  57. .BR ioctl (2)
  58. calls, and data can be transferred by calls to
  59. .BR read (2),
  60. and
  61. .BR write (2).
  62. .SS "Types (general)"
  63. .IP <sys/types.h>
  64. .br
  65. defines
  66. .BR u8_t ,
  67. .BR u16_t ,
  68. .B u32_t
  69. and
  70. .B i32_t
  71. (and
  72. .BR U8_t ,
  73. .BR U16_t ,
  74. .B U32_t
  75. and
  76. .B I32_t
  77. for use in prototypes).
  78. .SS "Types (eth)"
  79. .IP <net/gen/ether.h>
  80. .br
  81. defines struct ether_addr (fBether_addr_tfP) and
  82. .B ether_type_t
  83. and
  84. .B Ether_type_t
  85. for use in prototypes.
  86. .IP <net/gen/eth_io.h>
  87. .br
  88. defines struct nwio_ethopt (fBnwio_ethopt_tfP) and
  89. struct nwio_ethstat (fBnwio_ethstat_tfP)
  90. .IP <net/gen/eth_hdr.h>
  91. .br
  92. defines struct eth_hdr (fBeth_hdr_tfP)
  93. .SS "Types (ip)"
  94. .IP <net/gen/in.h>
  95. .br
  96. defines
  97. .BR ipaddr_t ,
  98. .BR ipproto_t
  99. and struct ip_hdropt (fBip_hdropt_tfP).
  100. .IP <net/gen/ip_io.h>
  101. .br
  102. defines struct nwio_ipconf (fBnwio_ipconf_tfP) and
  103. struct nwio_ipopt (fBnwio_ipopt_tfP)
  104. .IP <net/gen/ip_hdr.h>
  105. .br
  106. defines struct ip_hdr (fBip_hdr_tfP)
  107. .IP <net/gen/route.h>
  108. .br
  109. defines struct nwio_route (fBnwio_route_tfP)
  110. .SS "Types (tcp)"
  111. .IP <net/gen/tcp.h>
  112. .br
  113. defines
  114. .B tcpport_t
  115. and
  116. .B Tcpport_t
  117. for use in prototypes.
  118. .IP <net/gen/tcp_io.h>
  119. .br
  120. defines struct nwio_tcpconf (fBnwio_tcpconf_tfP),
  121. struct nwio_tcpcl (fBnwio_tcpcl_tfP),
  122. struct nwio_tcpatt (fBnwio_tcpatt_tfP) and
  123. struct nwio_tcpopt (fBnwio_tcpopt_tfP).
  124. .IP <net/gen/tcp_hdr.h>
  125. .br
  126. defines struct tcp_hdr (fBtcp_hdr_tfP) and struct tcp_hdropt
  127. (fBtcp_hdropt_tfP).
  128. .SS "Types (udp)"
  129. .IP <net/gen/udp.h>
  130. .br
  131. defines
  132. .B udpport_t
  133. and
  134. .B Udpport_t
  135. for use in prototypes.
  136. .IP <net/gen/udp_io.h>
  137. .br
  138. defines struct nwio_udpopt (fBnwio_udpopt_tfP).
  139. .IP <net/gen/udp_hdr.h>
  140. .br
  141. defines struct udp_hdr (fBudp_hdr_tfP) and struct udp_io_hdr
  142. (fBudp_io_hdr_tfP).
  143. .SS "Byte Order Conversion"
  144. All 16-bit and 32-bit quantities in IP headers must be in network byte
  145. order.  The macros described in
  146. .BR hton (3)
  147. can be used to convert these values to and from the byte order used by
  148. the host machine.
  149. .SS "The Internet Checksum"
  150. The
  151. .B OneC_sum
  152. function (see
  153. .BR oneC_sum (3))
  154. is used to calculate the one's complement checksum needed for IP network
  155. packets.
  156. .SS "General Functions"
  157. .PP
  158. .ft B
  159. fIfdfP = open(fItcpip_devicefP, O_RDWR)
  160. .ft R
  161. .PP
  162. This is how one normally obtains a filedescriptor for a new TCP/IP channel.
  163. .I tcpip_device
  164. names one of the TCP/IP devices.  The channel may be used both to send or to
  165. receive data.
  166. .PP
  167. .ft B
  168. fInfP = read(fIfdfP, fIbuffP, fIsizefP)
  169. .ft R
  170. .PP
  171. Receives one packet (low level devices) or a number of bytes (TCP stream).
  172. Returns the the number of bytes placed into
  173. .IR buf ,
  174. or returns -1 with an error code placed into
  175. .BR errno .
  176. .PP
  177. .ft B
  178. fInfP = write(fIfdfP, fIbuffP, fIsizefP)
  179. .ft R
  180. .PP
  181. Sends one packet (low level devices) or a number of bytes (TCP stream).
  182. Returns
  183. .I size
  184. or -1 with the error code placed into
  185. .BR errno .
  186. The TCP/IP
  187. .B read
  188. and
  189. .B write
  190. functions behave like reads and writes on pipes when it comes to signals.
  191. .SS "ETH Functions"
  192. .PP
  193. .ft B
  194. ioctl(fIfdfP, NWIOGETHSTAT, &struct nwio_ethstat)
  195. .ft R
  196. .PP
  197. The
  198. .B NWIOGETHSTAT
  199. ioctl
  200. returns the Ethernet address and some statistics of the Ethernet server of
  201. the channel
  202. .IR fd .
  203. The result is returned in the nwio_ethstat structure.
  204. The fBstruct nwio_ethstatfP is defined in <net/gen/eth_io.h>:
  205. .PP
  206. .RS
  207. .nf
  208. .if t .ft C
  209. typedef struct nwio_ethstat
  210. {
  211.         ether_addr_t nwes_addr;
  212.         eth_stat_t nwes_stat;
  213. } nwio_ethstat_t;
  214. .SP
  215. typedef struct eth_stat
  216. {
  217.     unsigned long ets_recvErr,  /* # receive errors */
  218. ets_sendErr,            /* # send error */
  219. ets_OVW,                /* # buffer overwrite warnings,
  220.                                    (packets arrive faster than
  221.                                     can be processed) */
  222. ets_CRCerr,             /* # crc errors of read */
  223. ets_frameAll,           /* # frames not aligned (# bits
  224.                                    not a multiple of 8) */
  225. ets_missedP,            /* # packets missed due to too
  226.                                    slow packet processing */
  227. ets_packetR,            /* # packets received */
  228. ets_packetT,            /* # packets transmitted */
  229. ets_transDef,           /* # transmission deferred (there
  230.                                    was a transmission of an
  231.                                    other station in progress */
  232. ets_collision,          /* # collisions */
  233. ets_transAb,            /* # transmissions aborted due
  234.                                    to excessive collisions */
  235. ets_carrSense,          /* # carrier sense lost */
  236. ets_fifoUnder,          /* # fifo underruns (processor
  237.                                    is too busy) */
  238. ets_fifoOver,           /* # fifo overruns (processor is
  239.                                    too busy) */
  240. ets_CDheartbeat,        /* # times unable to transmit
  241.                                    collision signal */
  242. ets_OWC;                /* # times out of window
  243.                                    collision */
  244. } eth_stat_t;
  245. .if t .ft R
  246. .fi
  247. .RE
  248. .PP
  249. .ft B
  250. ioctl(fIfdfP, NWIOSETHOPT, &struct nwio_ethopt)
  251. .ft R
  252. .PP
  253. Before an Ethernet channel can be used to send or receive
  254. Ethernet packets, it has to be configured using the
  255. .B NWIOSETHOPT
  256. ioctl.
  257. The structure
  258. .B nwio_ethopt
  259. is defined in <net/gen/eth_io.h>:
  260. .PP
  261. .RS
  262. .nf
  263. .if t .ft C
  264. typedef struct nwio_ethopt
  265. {
  266. u32_t nweo_flags;
  267. ether_addr_t nweo_multi, nweo_rem;
  268. ether_type_t nweo_type;
  269. } nwio_ethopt_t;
  270. .SP
  271. #define NWEO_NOFLAGS    0x0000L
  272. #define NWEO_ACC_MASK   0x0003L
  273. #       define NWEO_EXCL        0x00000001L
  274. #       define NWEO_SHARED      0x00000002L
  275. #       define NWEO_COPY        0x00000003L
  276. #define NWEO_LOC_MASK   0x0010L
  277. #       define NWEO_EN_LOC      0x00000010L
  278. #       define NWEO_DI_LOC      0x00100000L
  279. #define NWEO_BROAD_MASK 0x0020L
  280. #       define NWEO_EN_BROAD    0x00000020L
  281. #       define NWEO_DI_BROAD    0x00200000L
  282. #define NWEO_MULTI_MASK 0x0040L
  283. #       define NWEO_EN_MULTI    0x00000040L
  284. #       define NWEO_DI_MULTI    0x00400000L
  285. #define NWEO_PROMISC_MASK 0x0080L
  286. #       define NWEO_EN_PROMISC  0x00000080L
  287. #       define NWEO_DI_PROMISC  0x00800000L
  288. #define NWEO_REM_MASK   0x0100L
  289. #       define NWEO_REMSPEC     0x00000100L
  290. #       define NWEO_REMANY      0x01000000L
  291. #define NWEO_TYPE_MASK  0x0200L
  292. #       define NWEO_TYPESPEC    0x00000200L
  293. #       define NWEO_TYPEANY     0x02000000L
  294. #define NWEO_RW_MASK    0x1000L
  295. #       define NWEO_RWDATONLY   0x00001000L
  296. #       define NWEO_RWDATALL    0x10000000L
  297. .if t .ft R
  298. .fi
  299. .RE
  300. .PP
  301. The configuration is divided in a number of section (covered by the xx_MASK
  302. macros).
  303. Options can be set in the
  304. .B nweo_flags
  305. field.
  306. The first section (fBNWEO_ACC_MASKfP) controls the access to a certain
  307. Ethernet packet type.
  308. If
  309. .B NWEO_EXCL
  310. is selected then this is the only channel that can send or
  311. receive Ethernet packets of the selected type.
  312. If
  313. .B NWEO_SHARED
  314. is selected then multiple channels (which all have to
  315. select
  316. .BR NWEO_SHARED )
  317. can use the same Ethernet type, they all can send
  318. packets but incoming packets will be delivered to at most one of them.
  319. If
  320. .B NWEO_COPY
  321. is selected then multiple channels have access to the same
  322. Ethernet type and all receive a copy of an incoming packet.
  323. .LP
  324. The
  325. .B NWEO_LOC_MASK
  326. flags control the delivery of packets with a destination
  327. address equal to the Ethernet address of the machine.
  328. If
  329. .B NWEO_EN_LOC
  330. is selected then these packets will be delivered and with
  331. .B NWEO_DI_LOC
  332. they will be discarded.
  333. .PP
  334. .BR NWEO_BROAD_MASK ,
  335. .BR NWEO_MULTI_MASK ,
  336. and
  337. .B NWEO_PROMISC_MASK
  338. do the same to broadcast packets,
  339. multicast packets and promiscuous mode packets as
  340. .B NWEO_LOC_MASK
  341. does for local packets.
  342. Except that the precise multicast address is taken from the fBnweo_multifP
  343. field.
  344. .LP
  345. The
  346. .B NWEO_REM_MASK
  347. flags control whether communication is restricted to
  348. single destination or not.
  349. .B NWEO_REMSPEC
  350. restricts sending and receiving of packets to the single
  351. remote computer specified in the fBnweo_remfP field.
  352. .B NWEO_REMANY
  353. allows sending to and receiving from any remote computer.
  354. .PP
  355. .B NWEO_TYPESPEC
  356. restricts sending and receiving of packets to the type
  357. specified in fBnweo_typefP.
  358. The type has to be in network byte order (using
  359. .BR hton (3)).
  360. .B NWEO_TYPEANY
  361. allows any type.
  362. .PP
  363. If the Ethernet header is completely specified by the
  364. .B nweo_flags
  365. i.e., all of
  366. .BR NWEO_EN_LOC ,
  367. .BR NWEO_DI_BROAD ,
  368. .BR NWEO_DI_MULTI ,
  369. .BR NWEO_DI_PROMISC ,
  370. .BR NWEO_REMSPEC
  371. and
  372. .B NWEO_TYPESPEC
  373. are
  374. specified, then
  375. .B NWEO_RWDATONLY
  376. can be used to send and receive only the data part of an Ethernet packet.
  377. If
  378. .B NWEO_RWDATALL
  379. is specified then both Ethernet header and data are used.
  380. .SS "PSIP Functions"
  381. .PP
  382. [[[No description available yet.]]]
  383. .SS "IP Functions"
  384. .PP
  385. .ft B
  386. ioctl(fIfdfP, NWIOGIPCONF, &struct nwio_ipconf)
  387. .ft R
  388. .PP
  389. The
  390. .B NWIOGIPCONF
  391. ioctl reports the Internet Address and the netmask.
  392. For the fInwio_ipconffP structure see the fBNWIOSIPCONFfP ioctl below.
  393. .PP
  394. .ft B
  395. ioctl(fIfdfP, NWIOGIPOROUTE, &struct nwio_route)
  396. .ft R
  397. .PP
  398. The
  399. .B NWIOGIPOROUTE
  400. ioctl can be used to query an IP server about its routing table.
  401. [[[NWIODIPOROUTE, NWIOGIPIROUTE, NWIODIPIROUTE?]]]
  402. The structure fBnwio_routefP is defined in <net/gen/route.h>:
  403. .PP
  404. .RS
  405. .nf
  406. .if t .ft C
  407. typedef struct nwio_route
  408. {
  409.         u32_t nwr_ent_no;
  410.         u32_t nwr_ent_count;
  411.         ipaddr_t nwr_dest;
  412.         ipaddr_t nwr_netmask;
  413.         ipaddr_t nwr_gateway;
  414.         u32_t nwr_dist;
  415.         u32_t nwr_flags;
  416.         u32_t nwr_pref;
  417. } nwio_route_t;
  418. .SP
  419. #define NWRF_EMPTY      0
  420. #define NWRF_INUSE      1
  421. #define NWRF_FIXED      2
  422. .if t .ft R
  423. .fi
  424. .RE
  425. .PP
  426. The requested entry is taken from fBnwr_ent_nofP.
  427. Entries are counted from 0, so the value 0 can be used for an initial query.
  428. The size of the routing table is returned in fBnwr_ent_countfP.
  429. The fBnwr_flagsfP indicates if the entry is in use (fBNWRF_INUSEfP) and
  430. if the entry was inserted manually (using fBNWIOSIPOROUTEfP) or generated
  431. by the IP server itself.
  432. The route is described by
  433. .BR nwr_dest ,
  434. .BR nwr_netmask ,
  435. .BR nwr_gateway ,
  436. .BR nwr_dist ,
  437. and
  438. .BR nwr_pref .
  439. fBNwr_destfP and fBnwr_netmaskfP select the destination addresses.
  440. A value of 0.0.0.0 (0x0) in both fBnwr_destfP and fBnwr_netmaskfP means
  441. every host.
  442. A value of 255.255.255.255 (0xffffffff) in fBnwr_netmaskfP means a single
  443. host.
  444. Other values of fBnwr_netmaskfP are netmasks for the network specified
  445. by fBnwr_destfP.
  446. fBNwr_gatewayfP is gateway that should be used.
  447. fBNwr_distfP is a minimal distance.
  448. Packets with a time to live smaller than fBnwr_distfP will not reach the
  449. destination.
  450. If two routes have equal netmask and distance fields but different
  451. gateways then the gateway with highest value in fBnwr_preffP is used.
  452. .PP
  453. .ft B
  454. ioctl(fIfdfP, NWIOSIPCONF, &struct nwio_ipconf)
  455. .ft R
  456. .PP
  457. The
  458. .B NWIOSIPCONF
  459. ioctl can be used to inform the IP server about its Internet Address
  460. and/or its netmask.
  461. Normally an IP server will discover its Internet Address using the RARP
  462. protocol.
  463. .B NWIOSIPCONF
  464. can be used in the case that the RARP failed, or the netmask has to be changed.
  465. Note that higher level protocols (TCP and UDP) assume that the Internet Address
  466. of an IP device does not change, therefore TCP and UDP stop functioning if
  467. the Internet Address is changed.
  468. .PP
  469. The structure fBnwio_ipconffP is defined in <net/gen/ip_io.h>:
  470. .PP
  471. .RS
  472. .nf
  473. .if t .ft C
  474. typedef struct nwio_ipconf
  475. {
  476. u32_t   nwic_flags;
  477. ipaddr_t nwic_ipaddr;
  478. ipaddr_t nwic_netmask;
  479. } nwio_ipconf_t;
  480. .SP
  481. #define NWIC_NOFLAGS            0x0
  482. #define NWIC_FLAGS              0x3
  483. #       define NWIC_IPADDR_SET          0x1
  484. #       define NWIC_NETMASK_SET         0x2
  485. .if t .ft R
  486. .fi
  487. .RE
  488. .PP
  489. The function of fBnwio_ipconffP depends on the value of fBnwic_flagsfP.
  490. If
  491. .B NWIC_IPADDR_SET
  492. is set then the Internet Address will be set to
  493. fBnwic_ipaddrfP.
  494. If
  495. .B NWIC_NETMASK_SET
  496. is set then the Internet Address will be set to
  497. fBnwic_netmaskfP.
  498. .PP
  499. .ft B
  500. ioctl(fIfdfP, NWIOSIPOPT, &struct nwio_ipopt)
  501. .ft R
  502. .PP
  503. Before an IP channel can be used, it has to be configured using the
  504. .B NWIOSIPOPT
  505. ioctl.
  506. The structure fBnwio_ipoptfP is defined in <net/gen/ip_io.h>:
  507. .PP
  508. .RS
  509. .nf
  510. .if t .ft C
  511. typedef struct nwio_ipopt
  512. {
  513.         u32_t nwio_flags;
  514.         ipaddr_t nwio_rem;
  515.         ip_hdropt_t nwio_hdropt;
  516.         u8_t nwio_tos;
  517.         u8_t nwio_ttl;
  518.         u8_t nwio_df;
  519.         ipproto_t nwio_proto;
  520. } nwio_ipopt_t;
  521. .SP
  522. #define NWIO_NOFLAGS    0x0000L
  523. #define NWIO_ACC_MASK   0x0003L
  524. #       define NWIO_EXCL        0x00000001L
  525. #       define NWIO_SHARED      0x00000002L
  526. #       define NWIO_COPY        0x00000003L
  527. #define NWIO_LOC_MASK   0x0010L
  528. #       define NWIO_EN_LOC      0x00000010L
  529. #       define NWIO_DI_LOC      0x00100000L
  530. #define NWIO_BROAD_MASK 0x0020L
  531. #       define NWIO_EN_BROAD    0x00000020L
  532. #       define NWIO_DI_BROAD    0x00200000L
  533. #define NWIO_REM_MASK   0x0100L
  534. #       define NWIO_REMSPEC     0x00000100L
  535. #       define NWIO_REMANY      0x01000000L
  536. #define NWIO_PROTO_MASK 0x0200L
  537. #       define NWIO_PROTOSPEC   0x00000200L
  538. #       define NWIO_PROTOANY    0x02000000L
  539. #define NWIO_HDR_O_MASK 0x0400L
  540. #       define NWIO_HDR_O_SPEC  0x00000400L
  541. #       define NWIO_HDR_O_ANY   0x04000000L
  542. #define NWIO_RW_MASK    0x1000L
  543. #       define NWIO_RWDATONLY   0x00001000L
  544. #       define NWIO_RWDATALL    0x10000000L
  545. .if t .ft R
  546. .fi
  547. .RE
  548. .PP
  549. The options are divided in several categories:
  550. .BR NWIO_ACC_MASK ,
  551. .BR NWIO_LOC_MASK ,
  552. .BR NWIO_BROAD_MASK ,
  553. .BR NWIO_REM_MASK ,
  554. .BR NWIO_PROTO_MASK ,
  555. .B NWIO_HDR_O_MASK
  556. and
  557. .BR NWIO_RW_MASK .
  558. A channel is configured when one option of each category is set.
  559. .PP
  560. The options covered by
  561. .B NWIO_ACC_MASK
  562. control the number of channels that
  563. can use one IP protocol.
  564. If
  565. .B NWIO_EXCL
  566. is specified then only that channel can use a certain IP protocol.
  567. If
  568. .B NWIO_SHARED
  569. then multiple channels that all have to specify
  570. .B NWIO_SHARED
  571. can use the same IP protocol, but incoming packets will
  572. be delivered to a most one channel.
  573. .B NWIO_SHARED
  574. does not impose any restrictions.
  575. Every channel gets a copy of an incoming packet.
  576. .PP
  577. .B NWIO_LOC_MASK
  578. and
  579. .B NWIO_BROAD_MASK
  580. control the delivery of packets.
  581. If
  582. .B NWIO_EN_LOC
  583. is specified then packets that are explicitly send to
  584. the IP server are delivered.
  585. If
  586. .B NWIO_EN_BROAD
  587. is specified then broadcast packets are delivered.
  588. Either one or both of them can be disabled with
  589. .B NWIO_DI_LOC
  590. and
  591. .BR NWIO_DI_BROAD .
  592. .PP
  593. .B NWIO_REMSPEC
  594. can be used to restrict communication to one remote host.
  595. This host is taken from the fBnwio_remfP field.
  596. If any remote host is to be allowed then
  597. .B NWIO_REMANY
  598. can be used.
  599. .PP
  600. .B NWIO_PROTOSPEC
  601. restricts communication to one IP protocol, specified
  602. in fBnwio_protofP.
  603. .B NWIO_PROTOANY
  604. allows any protocol to be sent or received.
  605. .PP
  606. .B NWIO_HDR_O_SPEC
  607. specifies all IP header options in advance.
  608. The values are taken from
  609. .BR nwio_hdropt ,
  610. .BR nwio_tos ,
  611. .BR nwio_ttl ,
  612. and
  613. .BR nwio_df .
  614. fBNwio_hdroptfP specifies the IP options that should be present in an
  615. outgoing packet.
  616. fBIp_hdropt_tfP is defined in <net/gen/in.h>:
  617. .PP
  618. .RS
  619. .nf
  620. .if t .ft C
  621. typedef struct ip_hdropt
  622. {
  623.         u8_t iho_opt_siz;
  624.         u8_t iho_data[IP_MAX_HDR_SIZE-IP_MIN_HDR_SIZE];
  625. } ip_hdropt_t;
  626. .if t .ft R
  627. .fi
  628. .RE
  629. .PP
  630. The bytes of size fBiho_opt_sizfP in fBiho_datafP are appended to the IP
  631. header.
  632. fBNwio_tosfP specifies the value of the ``type of service'' bits,
  633. fBnwio_ttlfP gives the value of the ``time to live'' field and fBnwio_dffP
  634. specifies whether fragmentation is disallowed or not.
  635. .B NWIO_HDR_O_ANY
  636. specifies that the header options should be specified at
  637. each write request.
  638. .PP
  639. .B NWIO_RWDATONLY
  640. specifies that the header should be omitted from a
  641. write request.
  642. This option can only be used when all header fields are specified in previous
  643. options:
  644. .BR NWIO_EN_LOC ,
  645. .BR NWIO_DI_BROAD ,
  646. .BR NWIO_REMSPEC ,
  647. .B NWIO_PROTOSPEC
  648. and
  649. .BR NWIO_HDR_O_SPEC .
  650. A read operation will also only return the data part, so the IP options will
  651. be lost.
  652. .PP
  653. .ft B
  654. ioctl(fIfdfP, NWIOSIPOROUTE, &struct nwio_route)
  655. .ft R
  656. .PP
  657. The
  658. .B NWIOSIPOROUTE
  659. ioctl adds a route to the routing table.
  660. See fBNWIOGIPOROUTEfP above for a description of the fBnwio_routefP
  661. structure.
  662. The fields fBnwr_ent_nofP and fBnwr_ent_countfP are ignored.
  663. .SS "TCP Functions"
  664. .PP
  665. .ft B
  666. ioctl(fIfdfP, NWIOTCPCONN, &struct nwio_tcpcl)
  667. .ft R
  668. .PP
  669. The
  670. .B NWIOTCPCONN
  671. ioctl tries to setup a connection with a remote TCP/IP server.
  672. The channel must be fully configured (see
  673. .BR NWIOSTCPCONF )
  674. and values for the local port, the remote port and the remote address have be
  675. specified using
  676. .B NWTC_LP_SET
  677. or
  678. .BR NWTC_LP_SEL ,
  679. .B NWTC_SET_RA
  680. and
  681. .BR NWTC_SET_RP .
  682. The struct nwio_tcpcl is defined in <net/gen/tcp_io.h> as:
  683. .PP
  684. .RS
  685. .nf
  686. .if t .ft C
  687. typedef struct nwio_tcpcl
  688. {
  689. long nwtcl_flags;
  690. long nwtcl_ttl;
  691. } nwio_tcpcl_t;
  692. .if t .ft R
  693. .fi
  694. .RE
  695. .PP
  696. Set the
  697. .B nwtcl_flags
  698. field to zero before the connect or listen call.  [[[Further explanation of
  699. nwio_tcpcl?]]]
  700. .PP
  701. .ft B
  702. ioctl(fIfdfP, NWIOGTCPCONF, &struct nwio_tcpconf)
  703. .ft R
  704. .PP
  705. This call reports the current configuration of a TCP channel.
  706. The
  707. .B nwtc_flags
  708. field shows the status of the
  709. .BR access ,
  710. .BR locport ,
  711. .B remaddr
  712. and
  713. .B remport
  714. fields.
  715. .B Nwtc_locaddr
  716. contains the Internet address of the TCP/IP server.
  717. .B Remaddr
  718. contains the Internet address of the remote TCP/IP server when set with
  719. .B NWTC_SET_RA
  720. or after a successful connect or listen (see
  721. .B NWIOTCPCONN
  722. or
  723. .BR NWIOTCPLISTEN ).
  724. .B Nwio_locport
  725. contains the local TCP/IP port set with
  726. .B NWTC_LP_SET
  727. or the selected port set with
  728. .BR NWTC_LP_SEL .
  729. .B Nwtc_remport
  730. contains the TCP port of the remote TCP/IP server as set with
  731. .B NWIO_SET_RP
  732. or after a successful connect or listen.
  733. .PP
  734. A value of 0 (zero) is reported for
  735. .BR nwtc_remaddr ,
  736. .B nwtc_locport
  737. or
  738. .B nwtc_remport
  739. when no value is set either explicitly or implicitly.
  740. .PP
  741. .ft B
  742. ioctl(fIfdfP, NWIOTCPLISTEN, &struct nwio_tcpcl)
  743. .ft R
  744. .PP
  745. The
  746. .B NWIOTCPLISTEN
  747. ioctl waits until a remote TCP/IP server tries to connect to this channel.
  748. The channel has to be configured (see
  749. .BR NWIOSTCPCONF ).
  750. An additional restriction is that the local port
  751. must be set (with
  752. .BR NWTC_LP_SET )
  753. or selected (with
  754. .BR NWTC_LP_SEL ).
  755. When a remote address is set only connections for that host are accepted, and
  756. when a remote port is set only connections from that port are accepted.
  757. After a successful listen
  758. .B NWIOGTCPCONF
  759. can be used to find out what the address and port of the other side are.
  760. .PP
  761. .ft B
  762. ioctl(fIfdfP, NWIOSTCPCONF, &struct nwio_tcpconf)
  763. .ft R
  764. .PP
  765. Before a TCP channel can be used it must configured using the
  766. .B NWIOSTCPCONF
  767. ioctl.
  768. The parameters to
  769. .B NWIOSTCPCONF
  770. are the channel file descriptor and a
  771. .B struct nwio_tcpconf
  772. as defined in <net/gen/tcp_io.h>:
  773. .PP
  774. .RS
  775. .nf
  776. .if t .ft C
  777. typedef struct nwio_tcpconf
  778. {
  779. u32_t nwtc_flags;
  780. ipaddr_t nwtc_locaddr;
  781. ipaddr_t nwtc_remaddr;
  782. tcpport_t nwtc_locport;
  783. tcpport_t nwtc_remport;
  784. } nwio_tcpconf_t;
  785. .SP
  786. #define NWTC_NOFLAGS    0x0000L
  787. #define NWTC_ACC_MASK   0x0003L
  788. #       define NWTC_EXCL        0x00000001L
  789. #       define NWTC_SHARED      0x00000002L
  790. #       define NWTC_COPY        0x00000003L
  791. #define NWTC_LOCPORT_MASK       0x0030L
  792. #       define NWTC_LP_UNSET    0x00000010L
  793. #       define NWTC_LP_SET      0x00000020L
  794. #       define NWTC_LP_SEL      0x00000030L
  795. #define NWTC_REMADDR_MASK       0x0100L
  796. #       define NWTC_SET_RA      0x00000100L
  797. #       define NWTC_UNSET_RA    0x01000000L
  798. #define NWTC_REMPORT_MASK       0x0200L
  799. #       define NWTC_SET_RP      0x00000200L
  800. #       define NWTC_UNSET_RP    0x02000000L
  801. .if t .ft R
  802. .fi
  803. .RE
  804. .PP
  805. A tcp channel is considered configured when one flag in each category has
  806. been selected.
  807. Thus one of
  808. .BR NWTC_EXCL ,
  809. .B NWTC_SHARED
  810. or
  811. .BR NWTC_COPY ,
  812. one of
  813. .BR NWTC_LP_UNSET ,
  814. .B NWTC_LP_SET
  815. or
  816. .BR NWTC_LP_SEL ,
  817. one of
  818. .B NWTC_SET_RA
  819. or
  820. .BR NWTC_UNSET_RA ,
  821. and one of
  822. .B NWTC_SET_RP
  823. or
  824. .BR NWTC_UNSET_RP .
  825. .PP
  826. The acc flags control the access to a certain TCP port.
  827. .B NWTC_EXCL
  828. means exclusive access.
  829. An attempt to configure a channel will be denied if the same port is specified
  830. as that of a channel that requested exclusive access.
  831. .B NWTC_SHARED
  832. indicates that several channels use the same port but cooperate.
  833. If the shared mode is specified for one channel than all other channel that
  834. use the same port should also be configured with the
  835. .B NWTC_SHARED
  836. flag.
  837. .B NWTC_COPY
  838. is specified when the programmer does not care about other channels.
  839. This is the default.
  840. .PP
  841. The locport flags control which TCP port is used for communication.
  842. .B NWTC_LP_UNSET
  843. indicates the absence of a local port.
  844. This is the default.
  845. .B NWTC_LP_SET
  846. means that the
  847. .B nwtc_locport
  848. field contains the local port to be used by TCP.
  849. This value must be in network byte order (see
  850. .BR hton (3).)
  851. .B NWTC_LP_SEL
  852. requests the TCP server to pick a port.
  853. This port will be in the range from 32768 to 65535 and will be unique.
  854. .LP
  855. The
  856. .B remaddr
  857. flags specify which hosts are acceptable for connections.
  858. .B NWTC_SET_RA
  859. indicates that only connection to the host specified in
  860. .B nwtc_remaddr
  861. are acceptable.
  862. .B Nwtc_remaddr
  863. should be in network byte order (see
  864. .BR hton (3).)
  865. .B NWTC_UNSET_RA
  866. allows every host on the other side of a connection.
  867. This is the default.
  868. .PP
  869. The
  870. .B remport
  871. flags specify which remote ports are acceptable for connections.
  872. .B NWTC_SET_RP
  873. indicates that only the port specified in
  874. .B nwtc_remport
  875. is acceptable.
  876. .B NWTC_UNSET_RP
  877. allows every port on the other side of a connection.
  878. This is the default.
  879. .PP
  880. .ft B
  881. ioctl(fIfdfP, NWIOTCPSHUTDOWN)
  882. .ft R
  883. .PP
  884. The
  885. .B NWIOTCPSHUTDOWN
  886. tells the TCP/IP server that no more data will be sent over the channel
  887. specified by
  888. .IR fd .
  889. This command can be issued when the channel is connected to a remote TCP/IP
  890. server.
  891. The TCP/IP server will tell the remote TCP/IP server and the client of the
  892. remote TCP/IP server will receive an end-of-file indication.
  893. .PP
  894. .ft B
  895. ioctl(fIfdfP, NWIOGTCPOPT, &struct nwio_tcpopt)
  896. .br
  897. ioctl(fIfdfP, NWIOSTCPOPT, &struct nwio_tcpopt)
  898. .ft R
  899. .PP
  900. The behaviour of a TCP channel may be changed by setting a number of
  901. options.  The TCP options can be obtained with the
  902. .B NWIOGTCPOPT
  903. ioctl and set with the
  904. .B NWIOSTCPOPT
  905. ioctl.  The options are passed in a
  906. .B struct nwio_tcpopt
  907. as defined in <net/gen/tcp_io.h>:
  908. .PP
  909. .RS
  910. .nf
  911. .if t .ft C
  912. typedef struct nwio_tcpopt
  913. {
  914. u32_t nwto_flags;
  915. } nwio_tcpconf_t;
  916. .SP
  917. #define NWTO_NOFLAG     0x0000L
  918. #define NWTO_SND_URG_MASK       0x0001L
  919. #       define NWTO_SND_URG     0x00000001L
  920. #       define NWTO_SND_NOTURG  0x00010000L
  921. #define NWTO_RCV_URG_MASK       0x0002L
  922. #       define NWTO_RCV_URG     0x00000002L
  923. #       define NWTO_RCV_NOTURG  0x00020000L
  924. #define NWTO_BSD_URG_MASK       0x0004L
  925. #       define NWTO_BSD_URG     0x00000004L
  926. #define NWTO_DEL_RST_MASK       0x0008L
  927. #       define NWTO_DEL_RST     0x00000008L
  928. .if t .ft R
  929. .fi
  930. .RE
  931. .PP
  932. The
  933. .B NWTO_SND_URG
  934. option causes bytes written to the channel to be send out as urgent data.
  935. On receiving an
  936. .B EURG
  937. error the
  938. .B NWTO_RCV_URG
  939. option must be set to switch over to reading urgent data.  When all urgent
  940. data has been read an
  941. .B ENOURG
  942. error will follow,
  943. indicating that the option must be cleared with
  944. .BR NWTO_RCV_NOTURG .
  945. Alas the BSD implementation of urgent data disagrees with the RFC's, so to
  946. be BSD compatible one must set the
  947. .B NWTO_BSD_URG
  948. option beforehand on a channel that is to send or receive urgent data.
  949. Given that the BSD implementation is the regarded as the TCP/IP standard one
  950. should always use the BSD style.  The
  951. .B NWTO_DEL_RST
  952. option delays a failure response on a connect to the same port as the
  953. current open connection.  Without this option a connect would fail if
  954. a server is not yet listening.  With this option a connect will linger
  955. on until the server starts listening.  This option is useful for a server
  956. that opens a connection, tells the remote end the local port number and
  957. then listens (FTP), or for a program that forks off servers for incoming
  958. connections (TELNET).  A new connection may come in before a new listen
  959. can be started, so it is nice if the new connect doesn't fail.  Use this
  960. option only when it is clearly needed.
  961. .SS "UDP Functions"
  962. .PP
  963. .ft B
  964. ioctl(fIfdfP, NWIOGUDPOPT, &struct nwio_udpopt)
  965. .ft R
  966. .PP
  967. The
  968. .B NWIOGUDPOPT
  969. ioctl returns the current options that result from the default options
  970. and the options set with
  971. .BR NWIOSUDPOPT .
  972. When
  973. .B NWUO_LP_SEL
  974. or
  975. .B NWUO_LP_SET
  976. is selected the local port is returned in
  977. .BR nwuo_locport .
  978. When
  979. .B NWUO_RP_SET
  980. is selected the remote port is returned in
  981. .BR nwuo_remport .
  982. The local address is always returned in
  983. .BR nwuo_locaddr ,
  984. and when
  985. .B NWUO_RA_SET
  986. is selected the remote address is returned in
  987. .BR nwuo_remaddr .
  988. .PP
  989. .ft B
  990. ioctl(fIfdfP, NWIOSUDPOPT, &struct nwio_udpopt)
  991. .ft R
  992. .PP
  993. A UDP channel must be configured using the
  994. .B NWIOSUDPOPT
  995. ioctl before any data can be read or written.
  996. .B NWIOSUDPOPT
  997. takes two parameters, a file descriptor to an open UDP device and
  998. pointer to a
  999. .B nwio_udpopt
  1000. structure that describes the requested configuration.
  1001. The
  1002. .B nwio_udpopt
  1003. structure is defined in <net/gen/udp_io.h> as:
  1004. .PP
  1005. .RS
  1006. .nf
  1007. .if t .ft C
  1008. typedef struct nwio_udpopt
  1009. {
  1010. unsigned long nwuo_flags;
  1011. udpport_t nwuo_locport;
  1012. udpport_t nwuo_remport;
  1013. ipaddr_t nwuo_locaddr;
  1014. ipaddr_t nwuo_remaddr;
  1015. } nwio_udpopt_t;
  1016. .SP
  1017. #define NWUO_NOFLAGS            0x0000L
  1018. #define NWUO_ACC_MASK           0x0003L
  1019. #define         NWUO_EXCL               0x00000001L
  1020. #define         NWUO_SHARED             0x00000002L
  1021. #define         NWUO_COPY               0x00000003L
  1022. #define NWUO_LOCPORT_MASK       0x000CL
  1023. #define         NWUO_LP_SEL             0x00000004L
  1024. #define         NWUO_LP_SET             0x00000008L
  1025. #define         NWUO_LP_ANY             0x0000000CL
  1026. #define NWUO_LOCADDR_MASK       0x0010L
  1027. #define         NWUO_EN_LOC             0x00000010L
  1028. #define         NWUO_DI_LOC             0x00100000L
  1029. #define NWUO_BROAD_MASK         0x0020L
  1030. #define         NWUO_EN_BROAD           0x00000020L
  1031. #define         NWUO_DI_BROAD           0x00200000L
  1032. #define NWUO_REMPORT_MASK       0x0100L
  1033. #define         NWUO_RP_SET             0x00000100L
  1034. #define         NWUO_RP_ANY             0x01000000L
  1035. #define NWUO_REMADDR_MASK       0x0200L
  1036. #define         NWUO_RA_SET             0x00000200L
  1037. #define         NWUO_RA_ANY             0x02000000L
  1038. #define NWUO_RW_MASK            0x1000L
  1039. #define         NWUO_RWDATONLY          0x00001000L
  1040. #define         NWUO_RWDATALL           0x10000000L
  1041. #define NWUO_IPOPT_MASK         0x2000L
  1042. #define         NWUO_EN_IPOPT           0x00002000L
  1043. #define         NWUO_DI_IPOPT           0x20000000L
  1044. .if t .ft R
  1045. .fi
  1046. .RE
  1047. .PP
  1048. A UDP channel is considered configured when one flag in each category has been
  1049. selected.
  1050. Thus one of
  1051. .BR NWUO_EXCL ,
  1052. .B NWUO_SHARED
  1053. or
  1054. .BR NWUO_COPY ,
  1055. one of
  1056. .BR NWUO_LP_SEL ,
  1057. .B NWUO_LP_SET
  1058. or
  1059. .BR NWUO_LP_ANY ,
  1060. one of
  1061. .B NWUO_EN_LOC
  1062. or
  1063. .BR NWUO_DI_LOC ,
  1064. one of
  1065. .BR NWUO_EN_BROAD ,
  1066. or
  1067. .BR NWUO_DI_BROAD ,
  1068. one of
  1069. .BR NWUO_RP_SET ,
  1070. or
  1071. .BR NWUO_RP_ANY ,
  1072. one of
  1073. .BR NWUO_RA_SET ,
  1074. or
  1075. .BR NWUO_RA_ANY ,
  1076. one of
  1077. .BR NWUO_RWDATONLY ,
  1078. or
  1079. .BR NWUO_RWDATALL ,
  1080. and one of
  1081. .BR NWUO_EN_IPOPT ,
  1082. or
  1083. .BR NWUO_DI_IPOPT .
  1084. The acc flags control the access to a certain UDP port.
  1085. .B NWUO_EXCL
  1086. means exclusive access:
  1087. no other channel can use this port.
  1088. .B NWUO_SHARED
  1089. means shared access:
  1090. only channels that specify shared access can use this port
  1091. and all packets that are received are handed to at most one channel.
  1092. .B NWUO_COPY
  1093. imposes no access restriction and all channels get a copy of every received
  1094. packet for that port.
  1095. .PP
  1096. The
  1097. .B locport
  1098. flags control the selection of the UDP port for this channel.
  1099. .B NWUO_LP_SEL
  1100. requests the server to pick a port.
  1101. This port will be in the range from 32768 to 65535 and it will be unique.
  1102. .B NWUO_LP_SET
  1103. sets the local port to the value of the
  1104. .B nwuo_locport
  1105. field.
  1106. .B NWUO_LP_ANY
  1107. does not select a port.
  1108. Reception of data is therefore not possible but it is
  1109. possible to send data.
  1110. (See
  1111. .BR tcpip_read ,
  1112. and
  1113. .B tcpip_write
  1114. above).
  1115. .PP
  1116. The
  1117. .B locaddr
  1118. flags control the reception of packets.
  1119. .B NWUO_EN_LOC
  1120. enables the reception of packets with the local IP address as destination.
  1121. .B NWUO_DI_LOC
  1122. disables the reception of packet for the local IP address.
  1123. .PP
  1124. The
  1125. .B broad
  1126. flags control the reception of broadcast packets.
  1127. .B NWUO_EN_BROAD
  1128. enables the reception of broadcast packets and
  1129. .B NWUO_DI_BROAD
  1130. disables the reception of broadcast packets.
  1131. .PP
  1132. The
  1133. .B remport
  1134. flags let the client to specify one specific remote UDP port or
  1135. to allow any remote port.
  1136. .B NWUO_RP_SET
  1137. sets the remote UDP port to the value of
  1138. .BR nwuo_remport .
  1139. Only packets with a matching remote port will be delivered
  1140. and all packets will be sent to that port.
  1141. .B NWUO_RP_ANY
  1142. allows reception of packets form any port and when transmitting packets the
  1143. remote port has to be specified.
  1144. .PP
  1145. The
  1146. .B remaddr
  1147. flags control the remote IP address.
  1148. .B NWUO_RA_SET
  1149. sets the remote IP address the value of
  1150. .BR nwuo_remaddr .
  1151. Only packets from that address will be delivered and all packets will be sent
  1152. to that address.
  1153. .B NWUO_RA_ANY
  1154. allows reception of packets from any host and when transmitting packets the
  1155. remote host has to be specified.
  1156. .PP
  1157. The
  1158. .B rw
  1159. flags control the format of the data to be sent or received.
  1160. With
  1161. .B NWUO_RWDATONLY
  1162. only the data part of a UDP packet is sent to the server and only the data
  1163. part is received from the server.
  1164. The
  1165. .B NWUO_RWDATALL
  1166. mode presents the data part of a UDP packet with a header that contains
  1167. the source and destination IP address, source and destination UDP ports,
  1168. the IP options, etc.
  1169. The server expects such a header in front of the data to be transmitted.
  1170. .ig " Some for Philip to explain properly:
  1171. The header is defined in <net/gen/udp_hdr.h> and looks like this:
  1172. .PP
  1173. .RS
  1174. .nf
  1175. .if t .ft C
  1176. typedef struct udp_io_hdr
  1177. {
  1178. ipaddr_t uih_src_addr;
  1179. ipaddr_t uih_dst_addr;
  1180. udpport_t uih_src_port;
  1181. udpport_t uih_dst_port;
  1182. u16_t uih_ip_opt_len;
  1183. u16_t uih_data_len;
  1184. } udp_io_hdr_t;
  1185. .if t .ft R
  1186. .fi
  1187. .RE
  1188. .PP
  1189. The first four fields are the source and destination IP addresses and
  1190. ports.
  1191. .B Uih_ip_opt_len
  1192. is ???.
  1193. .B Uih_data_len
  1194. should equal the length of the packet data (packet lenght minus the
  1195. header.) ???
  1196. ..
  1197. .PP
  1198. The
  1199. .B ipopt
  1200. flags control the delivery and transmission of IP options.
  1201. When
  1202. .B NWUO_EN_IPOPT
  1203. is set IP, options will be delivered and sent.
  1204. When
  1205. .B NWUO_DI_IPOPT
  1206. is set IP option will be stripped from received packets and no IP options will
  1207. be sent.
  1208. .ig " Minix doesn't have this stuff (yet? ever?)
  1209. .SS "UDP Library Functions"
  1210. .PP
  1211. The following routines provide an somewhat easier to use interface to UDP than
  1212. the routines described above (fBtcpip_openfP, fBudp_ioc_setoptfP,
  1213. fBtcpip_readfP and fBtcpip_writefP).
  1214. .LP
  1215. .sC
  1216. errstat
  1217. udp_connect(udp_cap, chan_cap, srcport, dstport, dstaddr, flags)
  1218. capability *udp_cap;
  1219. capability *chan_cap;
  1220. udpport_t srcport;
  1221. udpport_t dstport;
  1222. ipaddr_t dstaddr;
  1223. int flags;
  1224. .eC
  1225. .kW "fIudp_connectfP"
  1226. fIUdp_connectfP combines the functionality of fItcpip_openfP and
  1227. fIudp_ioc_setoptfP.
  1228. A pointer to a UDP server capability should be passed in fIudp_capfP, and
  1229. the channel capability will be returned in the capability pointed to by
  1230. fIchan_capfP.
  1231. If fIsrcportfP is 0 then an unused port will be selected, otherwise the local
  1232. port will be set to fIsrcportfP.
  1233. If fIdstportfP is non-zero then communication will be restricted to remote ports
  1234. that equal to fIdstportfP, otherwise any data can be sent to or received from
  1235. any remote port.
  1236. The same thing applies to fIdstaddrfP; if fIdstaddrfP is non-zero then
  1237. only fIdstaddrfP can be reached.
  1238. Currently no flags are defined so fIflagsfP should be 0.
  1239. .sH
  1240. udp_reconnect
  1241. .LP
  1242. .sC
  1243. errstat
  1244. udp_reconnect(chan_cap, srcport, dstport, dstaddr, flags)
  1245. capability *chan_cap;
  1246. udpport_t srcport;
  1247. udpport_t dstport;
  1248. ipaddr_t dstaddr;
  1249. int flags;
  1250. .eC
  1251. .kW "fIudp_reconnectfP"
  1252. fIUdp_reconnectfP is the same as fIudp_connectfP except that an existing
  1253. channel capability is (re)used.
  1254. .sH
  1255. udp_read_msg
  1256. .LP
  1257. .sC
  1258. errstat
  1259. udp_read_msg(chan_cap, msg, msglen, actlen, flags)
  1260. capability *chan_cap;
  1261. char *msg;
  1262. int msglen;
  1263. int *actlen;
  1264. int flags;
  1265. .eC
  1266. .kW "fIudp_read_msgfP"
  1267. fIUdp_read_msgfP delivers a UDP packet.
  1268. The data part of the UDP packet is
  1269. prepended with an fIudp_io_hdrfP.
  1270. The actual length of the possibly truncated packet is returned in fIactlenfP.
  1271. No flags are defined so fIflagsfP should be 0.
  1272. .sH
  1273. udp_write_msg
  1274. .LP
  1275. .sC
  1276. errstat
  1277. udp_write_msg(chan_cap, msg, msglen, flags)
  1278. capability *chan_cap;
  1279. char *msg;
  1280. int msglen;
  1281. int flags;
  1282. .eC
  1283. .kW "fIudp_write_msgfP"
  1284. A UDP packet can be sent with fIudp_write_msgfP.
  1285. fIMsgfP should point to a fIudp_io_hdrfP followed by the data part of the
  1286. UDP packet.
  1287. The fIuih_dst_addrfP and fIuih_dst_portfP fields of the fIudp_io_hdrfP
  1288. should be filled in if no values are specified in the fIudp_connectfP,
  1289. or fIudp_reconnectfP.
  1290. .sH
  1291. udp_close
  1292. .LP
  1293. .sC
  1294. errstat
  1295. udp_close(chan_cap, flags)
  1296. capability *chan_cap;
  1297. int flags;
  1298. .eC
  1299. .kW "fIudp_closefP"
  1300. fIUdp_closefP cleans up the administration kept by the UDP library but does
  1301. not destroy the capability.
  1302. The function should be used if the capability is passed to another process
  1303. and should continue to exist.
  1304. No flags are defined so fIflagsfP should be 0.
  1305. .sH
  1306. udp_destroy
  1307. .LP
  1308. .sC
  1309. errstat
  1310. udp_destroy(chan_cap, flags)
  1311. capability *chan_cap;
  1312. int flags;
  1313. .eC
  1314. .kW "fIudp_destroyfP"
  1315. fIUdp_destroyfP not only cleans up the administration kept by the UDP library
  1316. but also destroys the channel capability.
  1317. ..
  1318. .SH FILES
  1319. .IP /dev/eth[01] 18n
  1320. First and second raw ethernet.
  1321. .IP /dev/psip[01]
  1322. First and second Pseudo IP network.
  1323. .IP /dev/ip[0123]
  1324. IP devices for two ethernets and two Pseudo IP networks.
  1325. .IP /dev/tcp[0123]
  1326. TCP devices for same four networks.
  1327. .IP /dev/udp[0123]
  1328. UDP devices.
  1329. .IP "/dev/eth, /dev/psip, /dev/ip, /dev/tcp, /dev/udp"
  1330. Devices for the default network, links to the devices above.
  1331. .B Eth
  1332. is only present if ethernet is the default,
  1333. .B psip
  1334. only for pseudo IP.
  1335. .SH "SEE ALSO"
  1336. .BR hton (3),
  1337. .BR oneC_sum (3),
  1338. .BR set_net_default (8),
  1339. .BR boot (8).
  1340. .SH DIAGNOSTICS
  1341. Several errors may be returned by the TCP/IP server.  The error code
  1342. is found in the
  1343. .B errno
  1344. variable if the
  1345. .BR read ,
  1346. .BR write ,
  1347. or
  1348. .B ioctl
  1349. call returns -1.  The TCP/IP error codes defined in <errno.h> are:
  1350. .IP EPACKSIZE 5c
  1351. This indicates an attempt to read or write with a buffer that is too
  1352. large or too small.
  1353. .IP EOUTOFBUFS
  1354. The TCP/IP server has insufficient memory to execute the request.
  1355. .IP EBADIOCTL
  1356. This indicates an attempt to execute a command the particular server
  1357. does not understand.
  1358. For example, a
  1359. .B NWIOGTCPCONF
  1360. on an ETH channel.
  1361. .IP EBADMODE
  1362. The request is refused because the channel is not fully configured, in the
  1363. wrong state or the parameters are invalid.
  1364. .IP EBADDEST
  1365. This indicates an illegal destination address for a packet.
  1366. .IP EDSTNORCH
  1367. The destination is not reachable.
  1368. .IP EISCONN
  1369. The channel is already connected so a second request is refused.
  1370. .IP EADDRINUSE
  1371. This address is in use.
  1372. .IP ECONNREFUSED
  1373. The connection is refused by the other side.
  1374. .IP ECONNRESET
  1375. The connection is reset (non-gracefully terminated) by the other side.
  1376. .IP ETIMEDOUT
  1377. The connection is terminated due to an expired timer.
  1378. .IP EURG
  1379. Urgent data is present and the current receive mode does not allow urgent data
  1380. to be transferred.
  1381. .IP ENOURG
  1382. No urgent data is present and a request came for urgent data.
  1383. .IP ENOTCONN
  1384. The request requires a connected channel and the channel is not connected.
  1385. .IP ESHUTDOWN
  1386. The connection is shut down.
  1387. That is, a
  1388. .B NWIOTCPSHUTDOWN
  1389. has been executed so no more data can be transmitted.
  1390. .IP ENOCONN
  1391. The connection does not exist.
  1392. .IP EGENERIC
  1393. A generic error code for extremely weird cases.
  1394. .SH AUTHOR
  1395. Philip Homburg (philip@cs.vu.nl)