123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- typedef struct Conf Conf;
- typedef struct Ctl Ctl;
- struct Conf
- {
- /* locally generated */
- char *type;
- char *dev;
- char mpoint[32];
- int cfd; /* ifc control channel */
- int dfd; /* ifc data channel (for ppp) */
- char *cputype;
- uchar hwa[32]; /* hardware address */
- int hwatype;
- int hwalen;
- uchar cid[32];
- int cidlen;
- char *baud;
- /* learned info */
- uchar gaddr[IPaddrlen];
- uchar laddr[IPaddrlen];
- uchar mask[IPaddrlen];
- uchar raddr[IPaddrlen];
- uchar dns[2*IPaddrlen];
- uchar fs[2*IPaddrlen];
- uchar auth[2*IPaddrlen];
- uchar ntp[IPaddrlen];
- int mtu;
- /* dhcp specific */
- int state;
- int fd;
- ulong xid;
- ulong starttime;
- char sname[64];
- char hostname[32];
- char domainname[64];
- uchar server[IPaddrlen]; /* server IP address */
- ulong offered; /* offered lease time */
- ulong lease; /* lease time */
- ulong resend; /* # of resends for current state */
- ulong timeout; /* time to timeout - seconds */
- /*
- * IPv6
- */
- /* solicitation specific - XXX add support for IPv6 leases */
- // ulong solicit_retries;
- /* router-advertisement related */
- uchar sendra;
- uchar recvra;
- uchar mflag;
- uchar oflag;
- int maxraint; /* rfc2461, p.39: 4sec ≤ maxraint ≤ 1800sec, def 600 */
- int minraint; /* 3sec ≤ minraint ≤ 0.75*maxraint */
- int linkmtu;
- int reachtime; /* 3,600,000 msec, default 0 */
- int rxmitra; /* default 0 */
- int ttl; /* default 0 (unspecified) */
- /* default gateway params */
- uchar v6gaddr[IPaddrlen];
- int routerlt; /* router life time */
- /* prefix related */
- uchar v6pref[IPaddrlen];
- int prefixlen;
- uchar onlink; /* flag: address is `on-link' */
- uchar autoflag; /* flag: autonomous */
- ulong validlt; /* valid lifetime (seconds) */
- ulong preflt; /* preferred lifetime (seconds) */
- };
- struct Ctl
- {
- Ctl *next;
- char *ctl;
- };
- extern Ctl *firstctl, **ctll;
- extern Conf conf;
- extern int noconfig;
- extern int ipv6auto;
- extern int debug;
- extern int dodhcp;
- extern int dolog;
- extern int nip;
- extern int plan9;
- extern int dupl_disc;
- extern Conf conf;
- extern int myifc;
- extern char *vs;
- void adddefroute(char*, uchar*);
- void binddevice(void);
- void bootprequest(void);
- void controldevice(void);
- void dhcpquery(int, int);
- void dhcprecv(void);
- void dhcpsend(int);
- int dhcptimer(void);
- void dhcpwatch(int);
- void doadd(int);
- void doremove(void);
- void dounbind(void);
- int getndb(void);
- int ipconfig4(void);
- int ipconfig6(int);
- long jitter(void);
- void lookforip(char*);
- void mkclientid(void);
- int nipifcs(char*);
- int openlisten(void);
- uchar *optaddaddr(uchar*, int, uchar*);
- uchar *optaddbyte(uchar*, int, int);
- uchar *optaddstr(uchar*, int, char*);
- uchar *optadd(uchar*, int, void*, int);
- uchar *optaddulong(uchar*, int, ulong);
- uchar *optaddvec(uchar*, int, uchar*, int);
- int optgetaddrs(uchar*, int, uchar*, int);
- int optgetaddr(uchar*, int, uchar*);
- int optgetbyte(uchar*, int);
- int optgetstr(uchar*, int, char*, int);
- uchar *optget(uchar*, int, int*);
- ulong optgetulong(uchar*, int);
- int optgetvec(uchar*, int, uchar*, int);
- int parseoptions(uchar *p, int n);
- int parseverb(char*);
- void procsetname(char *fmt, ...);
- void putndb(void);
- ulong randint(ulong low, ulong hi);
- void tweakservers(void);
- void usage(void);
- int validip(uchar*);
- void warning(char *fmt, ...);
- void writendb(char*, int, int);
- /*
- * IPv6
- */
- void doipv6(int);
- int ipconfig6(int);
- void recvra6(void);
- void sendra6(void);
- void v6paraminit(Conf *);
- typedef struct Headers Headers;
- typedef struct Ip4hdr Ip4hdr;
- typedef struct Lladdropt Lladdropt;
- typedef struct Mtuopt Mtuopt;
- typedef struct Prefixopt Prefixopt;
- typedef struct Routeradv Routeradv;
- typedef struct Routersol Routersol;
- enum {
- IsRouter = 1,
- IsHostRecv = 2,
- IsHostNoRecv = 3,
- MAClen = 6,
- IPv4 = 4,
- IPv6 = 6,
- Defmtu = 1400,
- IP_HOPBYHOP = 0,
- ICMPv4 = 1,
- IP_IGMPPROTO = 2,
- IP_TCPPROTO = 6,
- IP_UDPPROTO = 17,
- IP_ILPROTO = 40,
- IP_v6ROUTE = 43,
- IP_v6FRAG = 44,
- IP_IPsecESP = 50,
- IP_IPsecAH = 51,
- IP_v6NOMORE = 59,
- ICMP6_RS = 133,
- ICMP6_RA = 134,
- IP_IN_IP = 41,
- };
- enum {
- MFMASK = 1 << 7,
- OCMASK = 1 << 6,
- OLMASK = 1 << 7,
- AFMASK = 1 << 6,
- };
- enum {
- MAXTTL = 255,
- D64HLEN = IPV6HDR_LEN - IPV4HDR_LEN,
- IP_MAX = 32*1024,
- };
- struct Headers {
- uchar dst[IPaddrlen];
- uchar src[IPaddrlen];
- };
- struct Routersol {
- uchar vcf[4]; /* version:4, traffic class:8, flow label:20 */
- uchar ploadlen[2]; /* payload length: packet length - 40 */
- uchar proto; /* next header type */
- uchar ttl; /* hop limit */
- uchar src[IPaddrlen];
- uchar dst[IPaddrlen];
- uchar type;
- uchar code;
- uchar cksum[2];
- uchar res[4];
- };
- struct Routeradv {
- uchar vcf[4]; /* version:4, traffic class:8, flow label:20 */
- uchar ploadlen[2]; /* payload length: packet length - 40 */
- uchar proto; /* next header type */
- uchar ttl; /* hop limit */
- uchar src[IPaddrlen];
- uchar dst[IPaddrlen];
- uchar type;
- uchar code;
- uchar cksum[2];
- uchar cttl;
- uchar mor;
- uchar routerlt[2];
- uchar rchbltime[4];
- uchar rxmtimer[4];
- };
- struct Lladdropt {
- uchar type;
- uchar len;
- uchar lladdr[MAClen];
- };
- struct Prefixopt {
- uchar type;
- uchar len;
- uchar plen;
- uchar lar;
- uchar validlt[4];
- uchar preflt[4];
- uchar reserv[4];
- uchar pref[IPaddrlen];
- };
- struct Mtuopt {
- uchar type;
- uchar len;
- uchar reserv[2];
- uchar mtu[4];
- };
- void ea2lla(uchar *lla, uchar *ea);
- void ipv62smcast(uchar *smcast, uchar *a);
|