config.c
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:24k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. /* A collection of stuff heavily dependent on the configuration info
  2.  * in config.h. The idea is that configuration-dependent tables should
  3.  * be located here to avoid having to pepper lots of .c files with #ifdefs,
  4.  * requiring them to include config.h and be recompiled each time config.h
  5.  * is modified.
  6.  *
  7.  * Copyright 1991 Phil Karn, KA9Q
  8.  */
  9. #include <stdio.h>
  10. #include <dos.h>
  11. #include "global.h"
  12. #include "config.h"
  13. #include "mbuf.h"
  14. #include "timer.h"
  15. #include "proc.h"
  16. #include "iface.h"
  17. #include "ip.h"
  18. #ifdef IPSEC
  19. #include "ipsec.h"
  20. #include "photuris.h"
  21. #endif
  22. #include "tcp.h"
  23. #include "udp.h"
  24. #include "smtp.h"
  25. #ifdef ARCNET
  26. #include "arcnet.h"
  27. #endif
  28. #include "lapb.h"
  29. #include "ax25.h"
  30. #include "enet.h"
  31. #include "kiss.h"
  32. #include "nr4.h"
  33. #include "nrs.h"
  34. #include "netrom.h"
  35. #include "pktdrvr.h"
  36. #include "ppp.h"
  37. #include "slip.h"
  38. #include "arp.h"
  39. #include "icmp.h"
  40. #include "hardware.h" /***/
  41. #include "usock.h"
  42. #include "cmdparse.h"
  43. #include "commands.h"
  44. #include "mailbox.h"
  45. #include "ax25mail.h"
  46. #include "nr4mail.h"
  47. #include "tipmail.h"
  48. #include "daemon.h"
  49. #include "bootp.h"
  50. #include "asy.h"
  51. #include "trace.h"
  52. #include "session.h"
  53. #ifdef QTSO
  54. #include "qtso.h"
  55. #endif
  56. #ifdef CDMA_DM
  57. #include "dm.h"
  58. #include "rlp.h"
  59. #endif
  60. #ifdef DMLITE
  61. #include "dmlite.h"
  62. #include "rlp.h"
  63. #endif
  64. #ifdef SPPP
  65. #include "sppp.h"
  66. #endif
  67. #include "dialer.h"
  68. #ifdef KSP
  69. #include "ksp.h"
  70. #endif
  71. #ifdef SOUND
  72. #include "sb.h"
  73. #endif
  74. int dotest(int argc,char *argv[],void *p); /**/
  75. static int dostart(int argc,char *argv[],void *p);
  76. static int dostop(int argc,char *argv[],void *p);
  77. #ifdef AX25
  78. static void axip(struct iface *iface,struct ax25_cb *axp,uint8 *src,
  79. uint8 *dest,struct mbuf **bp,int mcast);
  80. static void axarp(struct iface *iface,struct ax25_cb *axp,uint8 *src,
  81. uint8 *dest,struct mbuf **bp,int mcast);
  82. static void axnr(struct iface *iface,struct ax25_cb *axp,uint8 *src,
  83. uint8 *dest,struct mbuf **bp,int mcast);
  84. #endif /* AX25 */
  85. struct mbuf *Hopper; /* Queue of incoming packets */
  86. unsigned Nsessions = NSESSIONS;
  87. unsigned Nsock = DEFNSOCK; /* Number of socket entries */
  88. /* Free memory threshold, below which things start to happen to conserve
  89.  * memory, like garbage collection, source quenching and refusing connects
  90.  */
  91. int32 Memthresh = MTHRESH;
  92. unsigned Nfiles = DEFNFILES;
  93. long Sfsize = 1000; /* Default size of session scrollback file */
  94. /* Command lookup and branch tables */
  95. struct cmds Cmds[] = {
  96. /* The "go" command must be first */
  97. "", go, 0, 0, NULL,
  98. #ifndef AMIGA
  99. "!", doshell, 0, 0, NULL,
  100. #endif
  101. #ifdef AMIGA
  102. "amiga", doamiga, 0, 0, NULL,
  103. #endif
  104. #if (defined(MAC) && defined(APPLETALK))
  105. "applestat", doatstat, 0, 0, NULL,
  106. #endif
  107. #if (defined(AX25) || defined(ETHER) || defined(APPLETALK))
  108. "arp", doarp, 0, 0, NULL,
  109. #endif
  110. #ifdef ASY
  111. "asystat", doasystat, 0, 0, NULL,
  112. #endif
  113. "attach", doattach, 0, 2,
  114. "attach <hardware> <hw specific options>",
  115. #ifdef AX25
  116. "ax25", doax25, 0, 0, NULL,
  117. #endif
  118. #ifdef BOOTP
  119. "bootp", dobootp, 0, 0, NULL,
  120. "bootpd", bootpdcmd, 0, 0, NULL,
  121. #endif
  122. /* This one is out of alpabetical order to allow abbreviation to "c" */
  123. #ifdef AX25
  124. "connect", doconnect, 1024, 3,
  125. "connect <interface> <callsign>",
  126. #endif
  127. #if !defined(UNIX) && !defined(AMIGA)
  128. "cd", docd, 0, 0, NULL,
  129. #endif
  130. "close", doclose, 0, 0, NULL,
  131. /* This one is out of alpabetical order to allow abbreviation to "d" */
  132. "disconnect", doclose, 0, 0, NULL,
  133. "delete", dodelete, 0, 2, "delete <file>",
  134. "detach", dodetach, 0, 2, "detach <interface>",
  135. "debug", dodebug, 0, 1, "debug [on|off]",
  136. #ifdef DIALER
  137. "dialer", dodialer, 0, 2,
  138.  "dialer <iface> <timeout> [device-dependent args]",
  139. #endif
  140. #ifndef AMIGA
  141. "dir", dodir, 0, 0, NULL, /* note sequence */
  142. #endif
  143. #ifdef CDMA_DM
  144. "dm", dodm, 0, 0, NULL,
  145. #endif
  146. #ifdef DMLITE
  147. "dmlite", dodml, 0, 0, NULL,
  148. #endif
  149. "domain", dodomain, 0, 0, NULL,
  150. #ifdef DRSI
  151. "drsistat", dodrstat, 0, 0, NULL,
  152. #endif
  153. #ifdef EAGLE
  154. "eaglestat", doegstat, 0, 0, NULL,
  155. #endif
  156. "echo", doecho, 0, 0, NULL,
  157. "eol", doeol, 0, 0, NULL,
  158. #if !defined(MSDOS)
  159. "escape", doescape, 0, 0, NULL,
  160. #endif
  161. "exit", doexit, 0, 0, NULL,
  162. #ifdef QFAX
  163. "fax", dofax, 4096, 2, "fax <server>",
  164. #endif
  165. "files", dofiles, 0, 0, NULL,
  166. "finger", dofinger, 1024, 2, "finger name@host",
  167. "ftp", doftp, 2048, 2, "ftp <address>",
  168. #ifdef HAPN
  169. "hapnstat", dohapnstat, 0, 0, NULL,
  170. #endif
  171. "help", dohelp, 0, 0, NULL,
  172. #ifdef HOPCHECK
  173. "hop", dohop, 0, 0, NULL,
  174. #endif
  175. "hostname", dohostname, 0, 0, NULL,
  176. #ifdef HS
  177. "hs", dohs, 0, 0, NULL,
  178. #endif
  179. "icmp", doicmp, 0, 0, NULL,
  180. "ifconfig", doifconfig, 0, 0, NULL,
  181. "ip", doip, 0, 0, NULL,
  182. #if defined(MSDOS) && !defined(CPU386)
  183. "isat", doisat, 0, 0, NULL,
  184. #endif
  185. "kick", dokick, 0, 0, NULL,
  186. #ifdef KSP
  187. "ksp", doksp, 0, 0, NULL,
  188. #endif
  189. "log", dolog, 0, 0, NULL,
  190. #ifdef LTERM
  191. "lterm", dolterm, 512, 3, "lterm <iface> <address> [<port>]",
  192. #endif
  193. #ifdef MAILBOX
  194. "mbox", dombox, 0, 0, NULL,
  195. #endif
  196. #ifndef UNIX
  197. "memory", domem, 0, 0, NULL,
  198. #endif
  199. "mkdir", domkd, 0, 2, "mkdir <directory>",
  200. "more", doview, 0, 2, "more <filename>",
  201. #ifdef NETROM
  202. "netrom", donetrom, 0, 0, NULL,
  203. #endif /* NETROM */
  204. #ifdef NNTP
  205. "nntp", donntp, 0, 0, NULL,
  206. #endif /* NNTP */
  207. #ifdef NRS
  208. "nrstat", donrstat, 0, 0, NULL,
  209. #endif /* NRS */
  210. "page", dopage, 0, 2, "page <command> [args...]",
  211. "param", doparam, 0, 2, "param <interface>",
  212. "ping", doping, 512, 2,
  213. "ping <hostid> [<length> [<interval> [incflag]]]",
  214. #ifdef PI
  215. "pistatus", dopistat, 0, 0, NULL,
  216. #endif
  217. #ifdef POP
  218. "pop", dopop, 0, 0, NULL,
  219. #endif
  220. #ifdef PPP
  221. "ppp", doppp_commands, 0, 0, NULL,
  222. #endif
  223. "ps", ps, 0, 0, NULL,
  224. #if !defined(UNIX) && !defined(AMIGA)
  225. "pwd", docd, 0, 0, NULL,
  226. #endif
  227. #ifdef QTSO
  228. "qtso", doqtso, 0, 0, NULL,
  229. #endif
  230. "record", dorecord, 0, 0, NULL,
  231. "remote", doremote, 0, 3, "remote [-p port] [-k key] [-a kickaddr] <address> exit|reset|kick",
  232. "rename", dorename, 0, 3, "rename <oldfile> <newfile>",
  233. "repeat", dorepeat, 1024, 3, "repeat <interval> <command> [args...]",
  234. "reset", doreset, 0, 0, NULL,
  235. #ifdef RIP
  236. "rip", dorip, 0, 0, NULL,
  237. #endif
  238. "rmdir", dormd, 0, 2, "rmdir <directory>",
  239. "route", doroute, 0, 0, NULL,
  240. "session", dosession, 0, 0, NULL,
  241. #ifdef IPSEC
  242. "secure", dosec, 0, 0, "secure [[add|delete] <host>]",
  243. #endif
  244. "scrollback", dosfsize, 0, 0, NULL,
  245. #ifdef SCC
  246. "sccstat", dosccstat, 0, 0, NULL,
  247. #endif
  248. #if !defined(AMIGA)
  249. "shell", doshell, 0, 0, NULL,
  250. #endif
  251. #if defined(SMTP)
  252. "smtp", dosmtp, 0, 0, NULL,
  253. #endif
  254. "socket", dosock, 0, 0, NULL,
  255. #ifdef SOUND
  256. "sound", dosound, 0, 2,
  257. "sound attach|detach|listen ...",
  258. #endif
  259. #ifdef SERVERS
  260. "start", dostart, 0, 2, "start <servername>",
  261. "stop", dostop, 0, 2, "stop <servername>",
  262. #endif
  263. "tcp", dotcp, 0, 0, NULL,
  264. "telnet", dotelnet, 1024, 2, "telnet <address>",
  265. #ifndef notdef
  266. "test", dotest, 1024, 0, NULL,
  267. #endif
  268. "tip", dotip, 256, 2, "tip <iface>",
  269. "topt", dotopt, 0, 0, NULL,
  270. #ifdef TRACE
  271. "trace", dotrace, 512, 0, NULL,
  272. #endif
  273. "udp", doudp, 0, 0, NULL,
  274. "upload", doupload, 0, 0, NULL,
  275. "view", doview, 0, 2, "view <filename>",
  276. #ifdef MSDOS
  277. "watch", doswatch, 0, 0, NULL,
  278. #endif
  279. "wipe", dowipe, 0, 0, NULL,
  280. "?", dohelp, 0, 0, NULL,
  281. NULL, NULL, 0, 0,
  282. "Unknown command; type "?" for list",
  283. };
  284. /* List of supported hardware devices */
  285. struct cmds Attab[] = {
  286. #ifdef ASY
  287. /* Ordinary PC asynchronous adaptor */
  288. "asy", asy_attach, 0, 8,
  289. #ifndef AMIGA
  290. "attach asy <address> <vector> slip|vjslip|ax25ui|ax25i|nrs|ppp <label> <buffers> <mtu> <speed> [ip_addr]",
  291. #else
  292. "attach asy <driver> <unit> slip|vjslip|ax25ui|ax25i|nrs|ppp <label> <buffers> <mtu> <speed> [ip_addr]",
  293. #endif /* AMIGA */
  294. #endif /* ASY */
  295. #ifdef PC100
  296. /* PACCOMM PC-100 8530 HDLC adaptor */
  297. "pc100", pc_attach, 0, 8,
  298. "attach pc100 <address> <vector> ax25ui|ax25i <label> <buffers>
  299.  <mtu> <speed> [ip_addra] [ip_addrb]",
  300. #endif
  301. #ifdef CDMA_DM
  302. "dm", dm_attach, 0, 8,
  303. "attach dm <address> <vector> <rxdrq> <txdrq> <label> <rxbuf> <mtu> <speed>",
  304. #endif
  305. #ifdef DRSI
  306. /* DRSI PCPA card in low speed mode */
  307. "drsi", dr_attach, 0, 8,
  308. "attach drsi <address> <vector> ax25ui|ax25i <label> <bufsize> <mtu>
  309. <chan a speed> <chan b speed> [ip addr a] [ip addr b]",
  310. #endif
  311. #ifdef EAGLE
  312. /* EAGLE RS-232C 8530 HDLC adaptor */
  313. "eagle", eg_attach, 0, 8,
  314. "attach eagle <address> <vector> ax25ui|ax25i <label> <buffers>
  315.  <mtu> <speed> [ip_addra] [ip_addrb]",
  316. #endif
  317. #ifdef PI
  318. /* PI 8530 HDLC adaptor */
  319. "pi", pi_attach, 0, 8,
  320. "attach pi <address> <vector> <dmachannel> ax25ui|ax25i <label> <buffers>
  321.  <mtu> <speed> [ip_addra] [ip_addrb]",
  322. #endif
  323. #ifdef HAPN
  324. /* Hamilton Area Packet Radio (HAPN) 8273 HDLC adaptor */
  325. "hapn", hapn_attach, 0, 8,
  326. "attach hapn <address> <vector> ax25ui|ax25i <label> <rx bufsize>
  327.  <mtu> csma|full [ip_addr]",
  328. #endif
  329. #ifdef APPLETALK
  330. /* Macintosh AppleTalk */
  331. "0", at_attach, 0, 7,
  332. "attach 0 <protocol type> <device> arpa <label> <rx bufsize> <mtu> [ip_addr]",
  333. #endif
  334. #ifdef NETROM
  335. /* fake netrom interface */
  336. "netrom", nr_attach, 0, 1,
  337. "attach netrom [ip_addr]",
  338. #endif
  339. #ifdef PACKET
  340. /* FTP Software's packet driver spec */
  341. "packet", pk_attach, 0, 4,
  342. "attach packet <int#> <label> <buffers> <mtu> [ip_addr]",
  343. #endif
  344. #ifdef QTSO
  345. /* CDMA QTSO data interface */
  346. "qtso", qtso_attach, 0, 2,
  347. "attach qtso <label> <com_port_label> [<com_port_label> ...]",
  348. #endif
  349. #ifdef HS
  350. /* Special high speed driver for DRSI PCPA or Eagle cards */
  351. "hs", hs_attach, 0, 7,
  352. "attach hs <address> <vector> ax25ui|ax25i <label> <buffers> <mtu>
  353.  <txdelay> <persistence> [ip_addra] [ip_addrb]",
  354. #endif
  355. #ifdef SCC
  356. "scc", scc_attach, 0, 7,
  357. "attach scc <devices> init <addr> <spacing> <Aoff> <Boff> <Dataoff>n"
  358. "   <intack> <vec> [p]<clock> [hdwe] [param]n"
  359. "attach scc <chan> slip|kiss|nrs|ax25ui|ax25i <label> <mtu> <speed> <bufsize> [call] ",
  360. #endif
  361. #ifdef ASY
  362. "4port",fp_attach, 0, 3, "attach 4port <base> <irq>",
  363. #endif
  364. #ifdef KSP
  365. "ksp", ksp_attach, 0, 5,
  366. "attach ksp <base> <irq> <label> <mtu>",
  367. #endif
  368. NULL,
  369. };
  370. #ifdef SERVERS
  371. /* "start" and "stop" subcommands */
  372. static struct cmds Startcmds[] = {
  373. #if defined(AX25) && defined(MAILBOX)
  374. "ax25", ax25start, 256, 0, NULL,
  375. #endif
  376. "bsr", bsr1, 256, 2, "start bsr <interface> [<port>]",
  377. "discard", dis1, 256, 0, NULL,
  378. "echo", echo1, 256, 0, NULL,
  379. #ifdef QFAX
  380. "fax", fax1, 256, 0, NULL,
  381. #endif
  382. "finger", finstart, 256, 0, NULL,
  383. "ftp", ftpstart, 256, 0, NULL,
  384. #if defined(NETROM) && defined(MAILBOX)
  385. "netrom", nr4start, 256, 0, NULL,
  386. #endif
  387. #ifdef POP
  388. "pop", pop1, 256, 0, NULL,
  389. #endif
  390. #ifdef RIP
  391. "rip", doripinit, 0,   0, NULL,
  392. #endif
  393. #ifdef SMTP
  394. "smtp", smtp1, 256, 0, NULL,
  395. #endif
  396. #if defined(MAILBOX)
  397. "telnet", telnet1, 256, 0, NULL,
  398. "tip", tipstart, 256, 2, "start tip <interface>",
  399. #endif
  400. "term", term1, 256, 0, NULL,
  401. "ttylink", ttylstart, 256, 0, NULL,
  402. "remote", rem1, 768, 0, NULL,
  403. NULL,
  404. };
  405. static struct cmds Stopcmds[] = {
  406. #if defined(AX25) && defined(MAILBOX)
  407. "ax25", ax250, 0, 0, NULL,
  408. #endif
  409. "bsr", bsr0, 0, 0, NULL,
  410. "discard", dis0, 0, 0, NULL,
  411. "echo", echo0, 0, 0, NULL,
  412. #if defined(QFAX)
  413. "fax", fax0, 0, 0, NULL,
  414. #endif
  415. "finger", fin0, 0, 0, NULL,
  416. "ftp", ftp0, 0, 0, NULL,
  417. #if defined(NETROM) && defined(MAILBOX)
  418. "netrom", nr40, 0, 0, NULL,
  419. #endif
  420. #ifdef POP
  421. "pop", pop0, 0, 0, NULL,
  422. #endif
  423. #ifdef RIP
  424. "rip", doripstop, 0, 0, NULL,
  425. #endif
  426. #ifdef SMTP
  427. "smtp", smtp0, 0, 0, NULL,
  428. #endif
  429. #ifdef MAILBOX
  430. "telnet", telnet0, 0, 0, NULL,
  431. "tip", tip0, 0, 2, "stop tip <interface>",
  432. #endif
  433. "term", term0, 0, 0, NULL,
  434. "ttylink", ttyl0, 0, 0, NULL,
  435. "remote", rem0, 0, 0, NULL,
  436. NULL,
  437. };
  438. #endif /* SERVERS */
  439. /* Socket-protocol interface table */
  440. struct socklink Socklink[] = {
  441. /* type,
  442.  * socket, bind, listen, connect,
  443.  * accept, recv, send, qlen,
  444.  * kick, shut, close, check,
  445.  * error, state, status, eol_seq
  446.  */
  447. TYPE_TCP,
  448. so_tcp, NULL, so_tcp_listen, so_tcp_conn,
  449. TRUE, so_tcp_recv, so_tcp_send, so_tcp_qlen,
  450. so_tcp_kick, so_tcp_shut, so_tcp_close, checkipaddr,
  451. Tcpreasons, tcpstate, so_tcp_stat, Inet_eol,
  452. TYPE_UDP,
  453. so_udp, so_udp_bind, NULL, so_udp_conn,
  454. FALSE, so_udp_recv, so_udp_send, so_udp_qlen,
  455. NULL, NULL, so_udp_close, checkipaddr,
  456. NULL, NULL, so_udp_stat, Inet_eol,
  457. #ifdef AX25
  458. TYPE_AX25I,
  459. so_ax_sock, NULL, so_ax_listen, so_ax_conn,
  460. TRUE, so_ax_recv, so_ax_send, so_ax_qlen,
  461. so_ax_kick, so_ax_shut, so_ax_close, checkaxaddr,
  462. Axreasons, axstate, so_ax_stat, Ax25_eol,
  463. TYPE_AX25UI,
  464. so_axui_sock, so_axui_bind, NULL, so_axui_conn,
  465. FALSE, so_axui_recv, so_axui_send, so_axui_qlen,
  466. NULL, NULL, so_axui_close, checkaxaddr,
  467. NULL, NULL, NULL, Ax25_eol,
  468. #endif /* AX25 */
  469. TYPE_RAW,
  470. so_ip_sock, NULL, NULL, so_ip_conn,
  471. FALSE, so_ip_recv, so_ip_send, so_ip_qlen,
  472. NULL, NULL, so_ip_close, checkipaddr,
  473. NULL, NULL, NULL, Inet_eol,
  474. #ifdef NETROM
  475. TYPE_NETROML3,
  476. so_n3_sock, NULL, NULL, so_n3_conn,
  477. FALSE, so_n3_recv, so_n3_send, so_n3_qlen,
  478. NULL, NULL, so_n3_close, checknraddr,
  479. NULL, NULL, NULL, Ax25_eol,
  480. TYPE_NETROML4,
  481. so_n4_sock, NULL, so_n4_listen, so_n4_conn,
  482. TRUE, so_n4_recv, so_n4_send, so_n4_qlen,
  483. so_n4_kick, so_n4_shut, so_n4_close, checknraddr,
  484. Nr4reasons, nrstate, so_n4_stat, Ax25_eol,
  485. #endif /* NETROM */
  486. #ifdef LOCSOCK
  487. TYPE_LOCAL_STREAM,
  488. so_los, NULL, NULL, NULL,
  489. TRUE, so_lo_recv, so_los_send, so_los_qlen,
  490. NULL, so_loc_shut, so_loc_close, NULL,
  491. NULL, NULL, so_loc_stat, Eol,
  492. TYPE_LOCAL_DGRAM,
  493. so_lod, NULL, NULL, NULL,
  494. FALSE, so_lo_recv, so_lod_send, so_lod_qlen,
  495. NULL, so_loc_shut, so_loc_close, NULL,
  496. NULL, NULL, so_loc_stat, Eol,
  497. #endif
  498. -1
  499. };
  500. /* Table of functions for printing socket addresses */
  501. char * (*Psock[]) () = {
  502. ippsocket,
  503. #ifdef AX25
  504. axpsocket,
  505. #else
  506. NULL,
  507. #endif
  508. #ifdef NETROM
  509. nrpsocket,
  510. #else
  511. NULL,
  512. #endif
  513. #ifdef LOCSOCK
  514. lopsocket,
  515. #else
  516. NULL,
  517. #endif
  518. };
  519. /* TCP port numbers to be considered "interactive" by the IP routing
  520.  * code and given priority in queueing
  521.  */
  522. int Tcp_interact[] = {
  523. IPPORT_FTP, /* FTP control (not data!) */
  524. IPPORT_TELNET, /* Telnet */
  525. 6000, /* X server 0 */
  526. IPPORT_LOGIN, /* BSD rlogin */
  527. IPPORT_MTP, /* Secondary telnet */
  528. -1
  529. };
  530. int (*Kicklist[])() = {
  531. kick,
  532. #ifdef SMTP
  533. smtptick,
  534. #endif
  535. NULL
  536. };
  537. /* Transport protocols atop IP */
  538. struct iplink Iplink[] = {
  539. TCP_PTCL, "TCP", tcp_input, tcp_dump,
  540. UDP_PTCL, "UDP", udp_input, udp_dump,
  541. ICMP_PTCL, "ICMP", icmp_input, icmp_dump,
  542. IP_PTCL, "IP", ipip_recv, ipip_dump,
  543. IP4_PTCL, "IP", ipip_recv, ipip_dump,
  544. #ifdef IPSEC
  545. ESP_PTCL, "ESP", esp_input, esp_dump,
  546. AH_PTCL, "AH", ah_input, ah_dump,
  547. #endif
  548. 0, NULL, NULL, NULL
  549. };
  550. /* Transport protocols atop ICMP */
  551. struct icmplink Icmplink[] = {
  552. TCP_PTCL, tcp_icmp,
  553. #ifdef IPSEC
  554. ESP_PTCL, esp_icmp,
  555. /* AH_PTCL, ah_icmp, */
  556. #endif
  557. 0, 0
  558. };
  559. #ifdef AX25
  560. /* Linkage to network protocols atop ax25 */
  561. struct axlink Axlink[] = {
  562. PID_IP, axip,
  563. PID_ARP, axarp,
  564. #ifdef NETROM
  565. PID_NETROM, axnr,
  566. #endif
  567. PID_NO_L3, axnl3,
  568. 0, NULL,
  569. };
  570. #endif /* AX25 */
  571. /* ARP protocol linkages, indexed by arp's hardware type */
  572. struct arp_type Arp_type[NHWTYPES] = {
  573. #ifdef NETROM
  574. AXALEN, 0, 0, 0, NULL, pax25, setcall, /* ARP_NETROM */
  575. #else
  576. 0, 0, 0, 0, NULL,NULL,NULL,
  577. #endif
  578. #ifdef ETHER
  579. EADDR_LEN,IP_TYPE,ARP_TYPE,1,Ether_bdcst,pether,gether, /* ARP_ETHER */
  580. #else
  581. 0, 0, 0, 0, NULL,NULL,NULL,
  582. #endif
  583. 0, 0, 0, 0, NULL,NULL,NULL, /* ARP_EETHER */
  584. #ifdef AX25
  585. AXALEN, PID_IP, PID_ARP, 10, Ax25multi[0], pax25, setcall,
  586. #else
  587. 0, 0, 0, 0, NULL,NULL,NULL, /* ARP_AX25 */
  588. #endif
  589. 0, 0, 0, 0, NULL,NULL,NULL, /* ARP_PRONET */
  590. 0, 0, 0, 0, NULL,NULL,NULL, /* ARP_CHAOS */
  591. 0, 0, 0, 0, NULL,NULL,NULL, /* ARP_IEEE802 */
  592. #ifdef ARCNET
  593. AADDR_LEN, ARC_IP, ARC_ARP, 1, ARC_bdcst, parc, garc, /* ARP_ARCNET */
  594. #else
  595. 0, 0, 0, 0, NULL,NULL,NULL,
  596. #endif
  597. 0, 0, 0, 0, NULL,NULL,NULL, /* ARP_APPLETALK */
  598. };
  599. /* Get rid of trace references in Iftypes[] if TRACE is turned off */
  600. #ifndef TRACE
  601. #define ip_dump NULL
  602. #define ax25_dump NULL
  603. #define ki_dump NULL
  604. #define sl_dump NULL
  605. #define ether_dump NULL
  606. #define ppp_dump NULL
  607. #define arc_dump NULL
  608. #endif /* TRACE */
  609. /* Table of interface types. Contains most device- and encapsulation-
  610.  * dependent info
  611.  */
  612. struct iftype Iftypes[] = {
  613. /* This entry must be first, since Loopback refers to it */
  614. "None", nu_send, nu_output, NULL,
  615. NULL, CL_NONE, 0, ip_proc,
  616. NULL, ip_dump, NULL, NULL,
  617. #ifdef AX25
  618. "AX25UI", axui_send, ax_output, pax25,
  619. setcall, CL_AX25, AXALEN, ax_recv,
  620. ax_forus, ax25_dump, NULL, NULL,
  621. "AX25I", axi_send, ax_output, pax25,
  622. setcall, CL_AX25, AXALEN, ax_recv,
  623. ax_forus, ax25_dump, NULL, NULL,
  624. #endif /* AX25 */
  625. #ifdef KISS
  626. "KISSUI", axui_send, ax_output, pax25,
  627. setcall, CL_AX25, AXALEN, kiss_recv,
  628. ki_forus, ki_dump, NULL, NULL,
  629. "KISSI", axi_send, ax_output, pax25,
  630. setcall, CL_AX25, AXALEN, kiss_recv,
  631. ki_forus, ki_dump, NULL, NULL,
  632. #endif /* KISS */
  633. #ifdef SLIP
  634. "SLIP", slip_send, NULL, NULL,
  635. NULL, CL_NONE, 0, ip_proc,
  636. NULL, ip_dump,
  637. #ifdef DIALER
  638. sd_init, sd_stat,
  639. #else
  640. NULL, NULL,
  641. #endif
  642. #endif /* SLIP */
  643. #ifdef VJCOMPRESS
  644. "VJSLIP", vjslip_send, NULL, NULL,
  645. NULL, CL_NONE, 0, ip_proc,
  646. NULL, sl_dump,
  647. #ifdef DIALER
  648. sd_init, sd_stat,
  649. #else
  650. NULL, NULL,
  651. #endif
  652. #endif /* VJCOMPRESS */
  653. #ifdef ETHER
  654. /* Note: NULL is specified for the scan function even though
  655.  * gether() exists because the packet drivers don't support
  656.  * address setting.
  657.  */
  658. "Ethernet", enet_send, enet_output, pether,
  659. NULL, CL_ETHERNET, EADDR_LEN, eproc,
  660. ether_forus, ether_dump, NULL, NULL,
  661. #endif /* ETHER */
  662. #ifdef NETROM
  663. "NETROM", nr_send, NULL, pax25,
  664. setcall, CL_NETROM, AXALEN, NULL,
  665. NULL, NULL, NULL, NULL,
  666. #endif /* NETROM */
  667. #ifdef SLFP
  668. "SLFP", pk_send, NULL, NULL,
  669. NULL, CL_NONE, 0, ip_proc,
  670. NULL, ip_dump, NULL, NULL,
  671. #endif /* SLFP */
  672. #ifdef PPP
  673. "PPP", ppp_send, ppp_output, NULL,
  674. NULL, CL_PPP, 0, ppp_proc,
  675. NULL, ppp_dump, NULL, NULL,
  676. #endif /* PPP */
  677. #ifdef SPPP
  678. "sppp", sppp_send, NULL, NULL,
  679. NULL, CL_NONE, 0, ip_proc,
  680. NULL, ip_dump, NULL, NULL,
  681. #endif /* SPPP */
  682. #ifdef ARCNET
  683. "Arcnet", anet_send, anet_output, parc,
  684. garc, CL_ARCNET, 1, aproc,
  685. arc_forus, arc_dump, NULL, NULL,
  686. #endif /* ARCNET */
  687. #ifdef QTSO
  688. "QTSO", qtso_send, NULL, NULL,
  689. NULL, CL_NONE, 0, ip_proc,
  690. NULL, NULL, NULL, NULL,
  691. #endif /* QTSO */
  692. #ifdef CDMA_DM
  693. "CDMA", rlp_send, NULL, NULL,
  694. NULL, CL_NONE, 0, ip_proc,
  695. NULL, ip_dump, dd_init, dd_stat,
  696. #endif
  697. #ifdef DMLITE
  698. "DMLITE", rlp_send, NULL, NULL,
  699. NULL, CL_NONE, 0, ip_proc,
  700. NULL, ip_dump, dl_init, dl_stat,
  701. #endif
  702. NULL, NULL, NULL, NULL,
  703. NULL, -1, 0, NULL,
  704. NULL, NULL, NULL, NULL,
  705. };
  706. /* Asynchronous interface mode table */
  707. #ifdef ASY
  708. struct asymode Asymode[] = {
  709. #ifdef SLIP
  710. "SLIP", FR_END, slip_init, slip_free,
  711. "VJSLIP", FR_END, slip_init, slip_free,
  712. #endif
  713. #ifdef KISS
  714. "AX25UI", FR_END, kiss_init, kiss_free,
  715. "AX25I", FR_END, kiss_init, kiss_free,
  716. "KISSUI", FR_END, kiss_init, kiss_free,
  717. "KISSI", FR_END, kiss_init, kiss_free,
  718. #endif
  719. #ifdef NRS
  720. "NRS", ETX, nrs_init, nrs_free,
  721. #endif
  722. #ifdef PPP
  723. "PPP", HDLC_FLAG, ppp_init, ppp_free,
  724. #endif
  725. #ifdef SPPP
  726. "SPPP", HDLC_FLAG, sppp_init, sppp_free,
  727. #endif
  728. #ifdef QTSO
  729. "QTSO", HDLC_FLAG, qtso_init, qtso_free,
  730. #endif
  731. #ifdef DMLITE
  732. "DMLITE", HDLC_FLAG, dml_init, dml_stop,
  733. #endif
  734. NULL
  735. };
  736. #else /* not ASY */
  737. /* Stubs for refs to asy I/O in stdio when ASY not configured */
  738. int
  739. asy_open(name)
  740. char *name;
  741. {
  742. return -1;
  743. }
  744. int
  745. asy_close(dev)
  746. int dev;
  747. {
  748. }
  749. asy_write(dev,buf,cnt)
  750. int dev;
  751. char *buf;
  752. int cnt;
  753. {
  754. return -1;
  755. }
  756. int
  757. asy_read(dev,buf,cnt);
  758. int dev;
  759. char *buf;
  760. int cnt;
  761. {
  762. return -1;
  763. }
  764. int
  765. asy_close(dev)
  766. int dev;
  767. {
  768. return -1;
  769. }
  770. #endif /* ASY */
  771. #ifndef IPSEC
  772. void
  773. rtype(uint16 c)
  774. {
  775. }
  776. #endif
  777. /* daemons to be run at startup time */
  778. struct daemon Daemons[] = {
  779. "killer", 512, killer,
  780. "gcollect", 256, gcollect,
  781. "timer", 1024, timerproc,
  782. "network", 1536, network,
  783. "keyboard", 250, keyboard,
  784. "random init", 650, rand_init,
  785. #ifdef PHOTURIS
  786. "keygen", 2048, gendh,
  787. "key mgmt", 2048, phot_proc,
  788. #endif
  789. NULL, 0, NULL
  790. };
  791. /* Functions to be called on each clock tick */
  792. void (*Cfunc[])() = {
  793. pctick, /* Call PC-specific stuff to keep time */
  794. sesflush, /* Flush current session output */
  795. #ifdef ASY
  796. asytimer,
  797. #endif
  798. #ifdef SCC
  799. scctimer,
  800. #endif
  801. NULL,
  802. };
  803. /* Entry points for garbage collection */
  804. void (*Gcollect[])() = {
  805. tcp_garbage,
  806. ip_garbage,
  807. udp_garbage,
  808. st_garbage,
  809. mbuf_garbage,
  810. #ifdef AX25
  811. lapb_garbage,
  812. #endif
  813. #ifdef NETROM
  814. nr_garbage,
  815. #endif
  816. NULL
  817. };
  818. /* Functions to be called at shutdown */
  819. void (*Shutdown[])() = {
  820. #ifdef ASY
  821. fp_stop,
  822. #endif
  823. #ifdef SCC
  824. sccstop,
  825. #endif
  826. #ifdef SOUND
  827. sbshut,
  828. #endif
  829. uchtimer, /* Unlink timer handler from timer chain */
  830. NULL,
  831. };
  832. #ifdef MAILBOX
  833. void (*Listusers)(FILE *network) = listusers;
  834. #else
  835. void (*Listusers)(FILE *network) = NULL;
  836. #endif /* MAILBOX */
  837. #ifndef BOOTP
  838. int WantBootp = 0;
  839. int
  840. bootp_validPacket(ip,bp)
  841. struct ip *ip;
  842. struct mbuf *bp;
  843. {
  844. return 0;
  845. }
  846. #endif /* BOOTP */
  847. /* Packet tracing stuff */
  848. #ifdef TRACE
  849. #include "trace.h"
  850. #else /* TRACE */
  851. /* Stub for packet dump function */
  852. void
  853. dump(iface,direction,type,bp)
  854. struct iface *iface;
  855. int direction;
  856. unsigned type;
  857. struct mbuf *bp;
  858. {
  859. }
  860. void
  861. raw_dump(iface,direction,bp)
  862. struct iface *iface;
  863. int direction;
  864. struct mbuf *bp;
  865. {
  866. }
  867. #endif /* TRACE */
  868. #ifndef TRACEBACK
  869. void
  870. stktrace()
  871. {
  872. }
  873. #endif
  874. #ifndef LZW
  875. void
  876. lzwfree(up)
  877. struct usock *up;
  878. {
  879. }
  880. #endif
  881. #ifdef AX25
  882. /* Hooks for passing incoming AX.25 data frames to network protocols */
  883. static void
  884. axip(
  885. struct iface *iface,
  886. struct ax25_cb *axp,
  887. uint8 *src,
  888. uint8 *dest,
  889. struct mbuf **bpp,
  890. int mcast
  891. ){
  892. (void)ip_route(iface,bpp,mcast);
  893. }
  894. static void
  895. axarp(
  896. struct iface *iface,
  897. struct ax25_cb *axp,
  898. uint8 *src,
  899. uint8 *dest,
  900. struct mbuf **bpp,
  901. int mcast
  902. ){
  903. (void)arp_input(iface,bpp);
  904. }
  905. #ifdef NETROM
  906. static void
  907. axnr(
  908. struct iface *iface,
  909. struct ax25_cb *axp,
  910. uint8 *src,
  911. uint8 *dest,
  912. struct mbuf **bpp, 
  913. int mcast
  914. ){
  915. if(!mcast)
  916. nr_route(bpp,axp);
  917. else
  918. nr_nodercv(iface,src,bpp);
  919. }
  920. #endif /* NETROM */
  921. #endif /* AX25 */
  922. #ifndef RIP
  923. /* Stub for routing timeout when RIP is not configured -- just remove entry */
  924. void
  925. rt_timeout(s)
  926. void *s;
  927. {
  928. struct route *stale = (struct route *)s;
  929. rt_drop(stale->target,stale->bits);
  930. }
  931. #endif
  932. /* Stubs for demand dialer */
  933. #ifndef DIALER
  934. void
  935. dialer_kick(asyp)
  936. struct asy *asyp;
  937. {
  938. }
  939. #endif
  940. /* Stubs for Van Jacobsen header compression */
  941. #if !defined(VJCOMPRESS) && defined(ASY)
  942. struct slcompress *
  943. slhc_init(rslots,tslots)
  944. int rslots;
  945. int tslots;
  946. {
  947. return NULLSLCOMPR;
  948. }
  949. int
  950. slhc_compress(comp, bpp, compress_cid)
  951. struct slcompress *comp;
  952. struct mbuf **bpp;
  953. int compress_cid;
  954. {
  955. return SL_TYPE_IP;
  956. }
  957. int
  958. slhc_uncompress(comp, bpp)
  959. struct slcompress *comp;
  960. struct mbuf **bpp;
  961. {
  962. return -1; /* Can't decompress */
  963. }
  964. void
  965. shlc_i_status(comp)
  966. struct slcompress *comp;
  967. {
  968. }
  969. void
  970. shlc_o_status(comp)
  971. struct slcompress *comp;
  972. {
  973. }
  974. int
  975. slhc_remember(comp, bpp)
  976. struct slcompress *comp;
  977. struct mbuf **bpp;
  978. {
  979. return -1;
  980. }
  981. #endif /* !defined(VJCOMPRESS) && defined(ASY) */
  982. #ifdef SERVERS
  983. static int
  984. dostart(argc,argv,p)
  985. int argc;
  986. char *argv[];
  987. void *p;
  988. {
  989. return subcmd(Startcmds,argc,argv,p);
  990. }
  991. static int
  992. dostop(argc,argv,p)
  993. int argc;
  994. char *argv[];
  995. void *p;
  996. {
  997. return subcmd(Stopcmds,argc,argv,p);
  998. }
  999. #endif /* SERVERS */
  1000. dotest(argc,argv,p)
  1001. int argc;
  1002. char *argv[];
  1003. void *p;
  1004. {
  1005. int32 stime,ftime;
  1006. char *bufa,*bufb;
  1007. int i;
  1008. bufa = malloc(1024);
  1009. bufb = malloc(1024);
  1010. stime = msclock();
  1011. for(i=0;i<1000;i++)
  1012. memcpy(bufa,bufb,1024);
  1013. ftime = msclock();
  1014. printf("Time for 1000 1024-byte copies: %lu msn",ftime - stime);
  1015. return 0;
  1016. }