+/* possible verbs */
+enum
+{
+ /* commands */
+ Vadd,
+ Vremove,
+ Vunbind,
+ Vaddpref6,
+ Vra6,
+
+ /* media */
+ Vether,
+ Vgbe,
+ Vppp,
+ Vloopback,
+ Vtorus,
+ Vtree,
+ Vpkt,
+};
+
typedef struct Conf Conf;
typedef struct Ctl Ctl;
char *dev;
char mpoint[32];
int cfd; /* ifc control channel */
- int dfd; /* ifc data channel (for ppp) */
+ int rfd; /* iproute control channel */
char *cputype;
uchar hwa[32]; /* hardware address */
int hwatype;
uchar laddr[IPaddrlen];
uchar mask[IPaddrlen];
uchar raddr[IPaddrlen];
- uchar dns[2*IPaddrlen];
+ uchar dns[8*IPaddrlen];
uchar fs[2*IPaddrlen];
uchar auth[2*IPaddrlen];
- uchar ntp[IPaddrlen];
+ uchar ntp[2*IPaddrlen];
int mtu;
/* dhcp specific */
ulong xid;
ulong starttime;
char sname[64];
- char hostname[32];
- char domainname[64];
+ char hostname[256];
+ char domainname[256];
+ char dnsdomain[256];
uchar server[IPaddrlen]; /* server IP address */
ulong offered; /* offered lease time */
ulong lease; /* lease time */
* IPv6
*/
- /* solicitation specific - XXX add support for IPv6 leases */
-// ulong solicit_retries;
-
/* router-advertisement related */
uchar sendra;
uchar recvra;
int maxraint; /* rfc2461, p.39: 4sec ≤ maxraint ≤ 1800sec, def 600 */
int minraint; /* 3sec ≤ minraint ≤ 0.75*maxraint */
int linkmtu;
+ int routerlt; /* router life time */
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 lladdr[IPaddrlen];
uchar v6pref[IPaddrlen];
int prefixlen;
uchar onlink; /* flag: address is `on-link' */
char *ctl;
};
-extern Ctl *firstctl, **ctll;
-
-extern Conf conf;
-
+extern Conf conf;
+extern int myifc;
+extern int beprimary;
extern int noconfig;
-extern int ipv6auto;
+
extern int debug;
-extern int dodhcp;
extern int dolog;
-extern int nip;
+
extern int plan9;
+extern int Oflag;
+
extern int dupl_disc;
-extern Conf conf;
-extern int myifc;
-extern char *vs;
+extern int nodhcpwatch;
+extern int sendhostname;
+extern char *ndboptions;
+
+void usage(void);
+int ip4cfg(void);
+void ipunconfig(void);
+
+void adddefroute(uchar*, uchar*, uchar*, uchar*);
+void removedefroute(uchar*, uchar*, uchar*, uchar*);
-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 catch(void*, char*);
+int countaddrs(uchar *a, int len);
+void addaddrs(uchar *to, int nto, uchar *from, int nfrom);
+void addnames(char *d, char *s, int len);
+int pnames(uchar*, int, char*);
+int gnames(char*, int, uchar*, int);
+Ndb* opendatabase(void);
+void ndb2conf(Ndb *db, uchar *ip);
void putndb(void);
+void refresh(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);
+#define DEBUG if(debug)warning
+#pragma varargck argpos warning 1
/*
- * IPv6
+ * DHCP
*/
+void dhcpinit(void);
+void dhcpquery(int, int);
+void dhcpwatch(int);
+int addoption(char*);
+/*
+ * IPv6
+ */
+void v6paraminit(Conf*);
+void parse6pref(int argc, char **argv);
+void parse6ra(int argc, char **argv);
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);
+int findllip(uchar *ip, Ipifc *ifc);
+int ip6cfg(void);