| plan 9 kernel history: overview | file list | diff list |
1997/0403/ip/ip.h (diff list | history)
| 1997/0327/sys/src/9/ip/ip.h:140,146 – 1997/0403/sys/src/9/ip/ip.h:140,146 (short | long) | ||
| 1997/0327 | void (*kick)(Conv*, int); char* (*connect)(Conv*, char**, int); | |
| 1997/0403 | char* (*announce)(Conv*, char**, int); | |
| 1997/0327 | int (*state)(char**, Conv*); void (*create)(Conv*); void (*close)(Conv*); | |
| 1997/0327/sys/src/9/ip/ip.h:179,184 – 1997/0403/sys/src/9/ip/ip.h:179,185 | ||
| 1997/0327 | Conv* Fsprotoclone(Proto*, char*); Proto* Fsrcvpcol(Fs*, byte); char* Fsstdconnect(Conv*, char**, int); | |
| 1997/0403 | char* Fsstdannounce(Conv*, char**, int); | |
| 1997/0327 | /* log flags */ enum | |
| 1997/0403/sys/src/9/ip/ip.h:121,127 – 1997/0417/sys/src/9/ip/ip.h:121,127 (short | long) | ||
| 1997/0327 | Ipaddr Mediagetaddr(Media*); Ipaddr Mediagetraddr(Media*); void Mediawrite(Media*, Block*, byte*); | |
| 1997/0417 | int Mediaifcread(char*, ulong, int); | |
| 1997/0327 | char* Mediaifcwrite(char*, int); void Mediaresolver(Media*); void Mediaread(Media*); | |
| 1997/0417/sys/src/9/ip/ip.h:3,10 – 1997/0423/sys/src/9/ip/ip.h:3,12 (short | long) | ||
| 1997/0327 | typedef struct Conv Conv; typedef struct Fs Fs; typedef union Hwaddr Hwaddr; | |
| 1997/0423 | typedef struct Ifcconv Ifcconv; | |
| 1997/0327 | typedef struct Iproute Iproute; typedef struct Media Media; | |
| 1997/0423 | typedef struct Multicast Multicast; | |
| 1997/0327 | typedef struct Proto Proto; typedef struct Pstate Pstate; typedef struct Tcpc Tcpc; | |
| 1997/0417/sys/src/9/ip/ip.h:19,26 – 1997/0423/sys/src/9/ip/ip.h:21,31 | ||
| 1997/0327 | MAXTTL= 255, | |
| 1997/0423 | Ipaddrlen= 4, | |
| 1997/0327 | Ipbcast= 0xffffffff, /* ip broadcast address */ Ipbcastobs= 0, /* obsolete (but still used) ip broadcast addr */ | |
| 1997/0423 | Ipallsys= 0xe0000001, /* multicast for all systems */ Ipallrouter= 0xe0000002, /* multicast for all routers */ | |
| 1997/0327 | }; enum | |
| 1997/0417/sys/src/9/ip/ip.h:87,97 – 1997/0423/sys/src/9/ip/ip.h:92,112 | ||
| 1997/0327 | MPACKET, }; | |
| 1997/0423 | /* one per multicast address per medium */ struct Multicast { Ipaddr addr; int ref; int timeout; Multicast *next; }; | |
| 1997/0327 | struct Media { int type; /* Media type */ Chan* mchan; /* Data channel */ Chan* achan; /* Arp channel */ | |
| 1997/0423 | Chan* cchan; /* Control channel */ | |
| 1997/0327 | char* dev; /* device mfd points to */ Ipaddr myip[5]; Ipaddr mymask; | |
| 1997/0417/sys/src/9/ip/ip.h:108,113 – 1997/0423/sys/src/9/ip/ip.h:123,132 | ||
| 1997/0327 | int inuse; Conv *c; /* for packet interface */ | |
| 1997/0423 | QLock mlock; /* lock for changing *multi */ Multicast *multi; /* list of multicast addresses we're listening to */ int mactive; /* number of active multicast addresses */ | |
| 1997/0327 | Media* link; }; int Mediaforme(byte*); | |
| 1997/0417/sys/src/9/ip/ip.h:122,132 – 1997/0423/sys/src/9/ip/ip.h:141,154 | ||
| 1997/0327 | Ipaddr Mediagetraddr(Media*); void Mediawrite(Media*, Block*, byte*); | |
| 1997/0417 | int Mediaifcread(char*, ulong, int); | |
| 1997/0327 |
| |
| 1997/0423 | char* Mediaifcwrite(Ifcconv*, char*, int); | |
| 1997/0327 | void Mediaresolver(Media*); void Mediaread(Media*); int Mediaarp(Media*, Block*, byte*, Hwaddr*); Media* Mediafind(Iproute*); | |
| 1997/0423 | Multicast* Mediacopymulti(Media*); void Mediamulticastadd(Media*, Ifcconv*, Ipaddr); void Mediamulticastrem(Media*, Ipaddr); | |
| 1997/0327 | /* * one per multiplexed protocol | |
| 1997/0417/sys/src/9/ip/ip.h:144,150 – 1997/0423/sys/src/9/ip/ip.h:166,172 | ||
| 1997/0327 | int (*state)(char**, Conv*); void (*create)(Conv*); void (*close)(Conv*); | |
| 1997/0423 | void (*rcv)(Media*, Block*); | |
| 1997/0327 | char* (*ctl)(Conv*, char**, int); void (*advise)(Block*, char*); | |
| 1997/0417/sys/src/9/ip/ip.h:195,200 – 1997/0423/sys/src/9/ip/ip.h:217,223 | ||
| 1997/0327 | Loggre= 1<<9, Logppp= 1<<10, Logtcpmsg= 1<<11, | |
| 1997/0423 | Logigmp= 1<<12, | |
| 1997/0327 | }; extern int logmask; /* mask of things to debug */ | |
| 1997/0417/sys/src/9/ip/ip.h:213,221 – 1997/0423/sys/src/9/ip/ip.h:236,246 | ||
| 1997/0327 | extern Fs fs; extern Media* media; extern int iprouting; /* true if routing turned on */ | |
| 1997/0423 | extern void (*igmpreportfn)(Media*, byte*); | |
| 1997/0327 | int arpread(byte*, ulong, int); char* arpwrite(char*, int); | |
| 1997/0423 | void closeifcconv(Ifcconv*); | |
| 1997/0327 | Ipaddr defmask(Ipaddr); int eipconv(va_list*, Fconv*); int equivip(byte*, byte*); | |
| 1997/0417/sys/src/9/ip/ip.h:226,236 – 1997/0423/sys/src/9/ip/ip.h:251,264 | ||
| 1997/0327 | ushort ipcsum(byte*); void (*ipextprotoiput)(Block*); Ipaddr ipgetsrc(byte*); | |
| 1997/0423 | void ipiput(Media*, Block*); | |
| 1997/0327 | void ipoput(Block*, int, int); int ipstats(char*, int); | |
| 1997/0423 | int ismcast(byte*); int isbmcast(byte*); | |
| 1997/0327 | byte* logctl(byte*); void maskip(byte*, byte*, byte*); | |
| 1997/0423 | Ifcconv* newifcconv(void); | |
| 1997/0327 | ulong nhgetl(byte*); ushort nhgets(byte*); void (*pktifcrcv)(Conv*, Block*); | |
| 1997/0417/sys/src/9/ip/ip.h:237,244 – 1997/0423/sys/src/9/ip/ip.h:265,272 | ||
| 1997/0327 | ushort ptclcsum(Block*, int, int); int pullblock(Block**, int); Block* pullupblock(Block*, int); | |
| 1997/0423 | char* routeadd(Ipaddr, Ipaddr, Ipaddr, Media *m); void routedelete(ulong, ulong, Media *m); | |
| 1997/0327 | int routeread(byte*, ulong, int); char* routewrite(char*, int); | |
| 1997/0417/sys/src/9/ip/ip.h:246,249 – 1997/0423/sys/src/9/ip/ip.h:274,277 | ||
| 1997/0327 | * ipaux.c */ int myetheraddr(uchar*, char*); | |
| 1997/0423 | ulong parseip(uchar*, char*); | |
| 1997/0423/sys/src/9/ip/ip.h:183,188 – 1997/0806/sys/src/9/ip/ip.h:183,189 (short | long) | ||
| 1997/0327 | ulong lenerr; /* short packet */ ulong order; /* out of order */ ulong rexmit; /* retransmissions */ | |
| 1997/0806 | ulong wclosed; /* window closed */ | |
| 1997/0327 | }; struct Fs | |
| 1997/0423/sys/src/9/ip/ip.h:218,223 – 1997/0806/sys/src/9/ip/ip.h:219,226 | ||
| 1997/0327 | Logppp= 1<<10, Logtcpmsg= 1<<11, | |
| 1997/0423 | Logigmp= 1<<12, | |
| 1997/0806 | Logudpmsg= 1<<13, Logipmsg= 1<<14, | |
| 1997/0327 | }; extern int logmask; /* mask of things to debug */ | |
| 1997/0806/sys/src/9/ip/ip.h:21,27 – 1997/0815/sys/src/9/ip/ip.h:21,27 (short | long) | ||
| 1997/0327 | MAXTTL= 255, | |
| 1997/0423 |
| |
| 1997/0815 | IPaddrlen= 4, | |
| 1997/0327 | Ipbcast= 0xffffffff, /* ip broadcast address */ Ipbcastobs= 0, /* obsolete (but still used) ip broadcast addr */ | |
| 1997/0423 | Ipallsys= 0xe0000001, /* multicast for all systems */ | |
| 1997/0815/sys/src/9/ip/ip.h:250,255 – 1997/0903/sys/src/9/ip/ip.h:250,256 (short | long) | ||
| 1997/0327 | void fatal(byte*, ...); void hnputl(byte*, ulong); void hnputs(byte*, ushort); | |
| 1997/0903 | void icmpnoconv(Block*); | |
| 1997/0327 | void initfrag(int); ushort ipcsum(byte*); void (*ipextprotoiput)(Block*); | |
| 1997/0903/sys/src/9/ip/ip.h:169,174 – 1997/0916/sys/src/9/ip/ip.h:169,175 (short | long) | ||
| 1997/0423 | void (*rcv)(Media*, Block*); | |
| 1997/0327 | char* (*ctl)(Conv*, char**, int); void (*advise)(Block*, char*); | |
| 1997/0916 | int (*stats)(char*, int); | |
| 1997/0327 | Conv **conv; /* array of conversations */ int ptclsize; /* size of per protocol ctl block */ | |
| 1997/0903/sys/src/9/ip/ip.h:183,189 – 1997/0916/sys/src/9/ip/ip.h:184,189 | ||
| 1997/0327 | ulong lenerr; /* short packet */ ulong order; /* out of order */ ulong rexmit; /* retransmissions */ | |
| 1997/0806 |
| |
| 1997/0327 | }; struct Fs | |
| 1997/0916/sys/src/9/ip/ip.h:129,134 – 1997/0926/sys/src/9/ip/ip.h:129,135 (short | long) | ||
| 1997/0423 | ||
| 1997/0327 | Media* link; }; | |
| 1997/0926 | int Mediabooting(void); | |
| 1997/0327 | int Mediaforme(byte*); int Mediaforpt2pt(byte*); Ipaddr Mediagetsrc(byte*); | |
| 1997/0916/sys/src/9/ip/ip.h:266,271 – 1997/0926/sys/src/9/ip/ip.h:267,273 | ||
| 1997/0327 | ulong nhgetl(byte*); ushort nhgets(byte*); void (*pktifcrcv)(Conv*, Block*); | |
| 1997/0926 | ushort ptclbsum(byte*, int); | |
| 1997/0327 | ushort ptclcsum(Block*, int, int); int pullblock(Block**, int); Block* pullupblock(Block*, int); | |
| 1997/0926/sys/src/9/ip/ip.h:1,15 – 1998/0306/sys/src/9/ip/ip.h:1,19 (short | long) | ||
| 1997/0327 |
| |
| 1997/0423 | typedef struct Ifcconv Ifcconv; | |
| 1998/0306 | typedef struct Ipself Ipself; typedef struct Iplink Iplink; typedef struct Iplifc Iplifc; typedef struct Ipmulti Ipmulti; | |
| 1997/0327 | typedef struct Iproute Iproute; | |
| 1997/0423 |
| |
| 1998/0306 | typedef struct Ipifc Ipifc; typedef struct Medium Medium; | |
| 1997/0327 | typedef struct Proto Proto; typedef struct Pstate Pstate; typedef struct Tcpc Tcpc; | |
| 1998/0306 | typedef struct Arpent Arpent; typedef struct Route Route; | |
| 1997/0327 | enum { | |
| 1997/0926/sys/src/9/ip/ip.h:18,31 – 1998/0306/sys/src/9/ip/ip.h:22,39 | ||
| 1997/0327 | Nhash= 64, Maxincall= 5, Nchans= 256, | |
| 1998/0306 | MAClen= 16, /* longest mac address */ | |
| 1997/0327 | MAXTTL= 255, | |
| 1997/0815 |
| |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1998/0306 | IPaddrlen= 16, IPv4addrlen= 4, IPv4off= 12, IPllen= 4, /* ip versions */ V4= 4, V6= 6, | |
| 1997/0327 | }; enum | |
| 1997/0926/sys/src/9/ip/ip.h:46,53 – 1998/0306/sys/src/9/ip/ip.h:54,61 | ||
| 1997/0327 | int x; /* conversation index */ Proto* p; | |
| 1998/0306 | uchar laddr[IPaddrlen]; /* local IP address */ uchar raddr[IPaddrlen]; /* remote IP address */ | |
| 1997/0327 | int restricted; /* remote port is restricted */ ushort lport; /* local port number */ ushort rport; /* remote port number */ | |
| 1997/0926/sys/src/9/ip/ip.h:77,155 – 1998/0306/sys/src/9/ip/ip.h:85,181 | ||
| 1997/0327 | QLock listenq; Rendez listenr; | |
| 1998/0306 | Ipmulti *multi; /* multicast bindings for this interface */ | |
| 1997/0327 | void* ptcl; /* protocol specific stuff */ }; | |
| 1998/0306 | struct Medium | |
| 1997/0327 | { | |
| 1998/0306 | char *name; int hsize; /* medium header size */ int minmtu; /* default min mtu */ int maxmtu; /* default max mtu */ int maclen; /* mac address length */ void (*bind)(Ipifc*, int, char**); void (*unbind)(Ipifc*); void (*bwrite)(Ipifc *ifc, Block *b, int version, uchar *ip); /* for arming interfaces to receive multicast */ void (*addmulti)(Ipifc *ifc, uchar *a, uchar *ia); void (*remmulti)(Ipifc *ifc, uchar *a, uchar *ia); /* process packets written to 'data' */ void (*pktin)(Ipifc *ifc, Block *bp); /* routes for router boards */ void (*addroute)(Ipifc *ifc, int, uchar*, uchar*, uchar*, int); void (*remroute)(Ipifc *ifc, int, uchar*, uchar*); void (*flushroutes)(Ipifc *ifc); /* for routing multicast groups */ void (*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia, uchar **iap); void (*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); | |
| 1997/0327 | }; | |
| 1998/0306 | /* logical interface associated with a physical one */ struct Iplifc | |
| 1997/0327 | { | |
| 1998/0306 | uchar local[IPaddrlen]; uchar mask[IPaddrlen]; uchar remote[IPaddrlen]; uchar net[IPaddrlen]; Iplink *link; /* addresses linked to this lifc */ Iplifc *next; | |
| 1997/0327 | }; | |
| 1997/0423 |
| |
| 1998/0306 | /* binding twixt Ipself and Ipifc */ struct Iplink | |
| 1997/0423 | { | |
| 1998/0306 | Ipself *local; Iplifc *lifc; Iplink *locallink; /* next link for this local address */ Iplink *lifclink; /* next link for this ifc */ ulong expire; Iplink *next; /* free list */ | |
| 1997/0423 | int ref; | |
| 1997/0327 |
| |
| 1998/0306 | struct Ipifc | |
| 1997/0327 | { | |
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1998/0306 | RWlock; Conv *conv; /* link to its conversation structure */ char dev[64]; /* device we're attached to */ Medium *m; /* Media pointer */ | |
| 1997/0327 | int maxmtu; /* Maximum transfer unit */ int minmtu; /* Minumum tranfer unit */ | |
| 1998/0306 | void *arg; /* medium specific */ /* these are used so that we can unbind on the fly */ Lock idlock; uchar ifcid; /* incremented each 'bind/unbind/add/remove' */ int ref; /* number of proc's using this ipifc */ Rendez wait; /* where unbinder waits for ref == 0 */ int unbinding; uchar mac[MAClen]; /* MAC address */ Iplifc *lifc; /* logical interfaces on this physical one */ | |
| 1997/0327 | ulong in, out; /* message statistics */ ulong inerr, outerr; /* ... */ | |
| 1998/0306 | }; | |
| 1997/0327 | ||
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1998/0306 | /* * one per multicast-lifc pair used by a Conv */ struct Ipmulti { uchar ma[IPaddrlen]; uchar ia[IPaddrlen]; Ipmulti *next; | |
| 1997/0327 | }; | |
| 1997/0926 |
| |
| 1997/0327 |
| |
| 1997/0417 |
| |
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1997/0327 | /* * one per multiplexed protocol | |
| 1997/0926/sys/src/9/ip/ip.h:156,162 – 1998/0306/sys/src/9/ip/ip.h:182,188 | ||
| 1997/0327 | */ struct Proto { | |
| 1998/0306 | QLock; | |
| 1997/0327 | char* name; /* protocol name */ int x; /* protocol index */ int ipproto; /* ip protocol type */ | |
| 1997/0926/sys/src/9/ip/ip.h:164,176 – 1998/0306/sys/src/9/ip/ip.h:190,205 | ||
| 1997/0327 | void (*kick)(Conv*, int); char* (*connect)(Conv*, char**, int); | |
| 1997/0403 | char* (*announce)(Conv*, char**, int); | |
| 1997/0327 |
| |
| 1998/0306 | char* (*bind)(Conv*, char**, int); int (*state)(Conv*, char*, int); | |
| 1997/0327 | void (*create)(Conv*); void (*close)(Conv*); | |
| 1997/0423 |
| |
| 1998/0306 | void (*rcv)(uchar*, Block*); | |
| 1997/0327 | char* (*ctl)(Conv*, char**, int); void (*advise)(Block*, char*); | |
| 1997/0916 | int (*stats)(char*, int); | |
| 1998/0306 | int (*local)(Conv*, char*, int); int (*inuse)(Conv*); | |
| 1997/0327 | Conv **conv; /* array of conversations */ int ptclsize; /* size of per protocol ctl block */ | |
| 1997/0926/sys/src/9/ip/ip.h:196,211 – 1998/0306/sys/src/9/ip/ip.h:225,243 | ||
| 1997/0327 | Proto* t2p[256]; /* vector of all ip protocol handlers */ }; int Fsconnected(Fs*, Conv*, char*); | |
| 1998/0306 | Conv* Fsnewcall(Fs*, Conv*, uchar*, ushort, uchar*, ushort); | |
| 1997/0327 | int Fspcolstats(char*, int); int Fsproto(Fs*, Proto*); | |
| 1998/0306 | int Fsbuiltinproto(Fs*, uchar); | |
| 1997/0327 | Conv* Fsprotoclone(Proto*, char*); | |
| 1998/0306 | Proto* Fsrcvpcol(Fs*, uchar); | |
| 1997/0327 | char* Fsstdconnect(Conv*, char**, int); | |
| 1997/0403 | char* Fsstdannounce(Conv*, char**, int); | |
| 1998/0306 | char* Fsstdbind(Conv*, char**, int); | |
| 1997/0327 |
| |
| 1998/0306 | /* * logging */ | |
| 1997/0327 | enum { Logip= 1<<1, | |
| 1997/0926/sys/src/9/ip/ip.h:225,231 – 1998/0306/sys/src/9/ip/ip.h:257,264 | ||
| 1997/0327 | }; extern int logmask; /* mask of things to debug */ | |
| 1998/0306 | extern uchar iponly[IPaddrlen]; /* ip address to print debugging for */ extern int iponlyset; | |
| 1997/0327 | void netlogopen(void); void netlogclose(void); | |
| 1997/0926/sys/src/9/ip/ip.h:233,283 – 1998/0306/sys/src/9/ip/ip.h:266,465 | ||
| 1997/0327 | long netlogread(void*, ulong, long); void netlog(int, char*, ...); | |
| 1998/0306 | /* * iproute.c */ typedef struct RouteTree RouteTree; typedef struct Routewalk Routewalk; typedef struct V4route V4route; typedef struct V6route V6route; | |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1998/0306 | enum { | |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1997/0903 |
| |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1997/0926 |
| |
| 1997/0327 |
| |
| 1997/0423 |
| |
| 1997/0327 |
| |
| 1998/0306 | /* type bits */ Rv4= (1<<0), /* this is a version 4 route */ Rifc= (1<<1), /* this route is a directly connected interface */ Rptpt= (1<<2), /* this route is a pt to pt interface */ Runi= (1<<3), /* a unicast self address */ Rbcast= (1<<4), /* a broadcast self address */ Rmulti= (1<<5), /* a multicast self address */ }; | |
| 1997/0327 | ||
| 1998/0306 | struct Routewalk { int n; int o; int h; char* p; void* state; void (*walk)(Route*, Routewalk*); }; struct RouteTree { Route* right; Route* left; Route* mid; uchar depth; uchar type; uchar ifcid; /* must match ifc->id */ Ipifc *ifc; char tag[4]; }; struct V4route { ulong address; ulong endaddress; uchar gate[IPv4addrlen]; }; struct V6route { ulong address[IPllen]; ulong endaddress[IPllen]; uchar gate[IPaddrlen]; }; struct Route { RouteTree; union { V6route v6; V4route v4; }; }; extern void v4addroute(char *tag, uchar *a, uchar *mask, uchar *gate, int type); extern void v6addroute(char *tag, uchar *a, uchar *mask, uchar *gate, int type); extern void v4delroute(uchar *a, uchar *mask); extern void v6delroute(uchar *a, uchar *mask); extern Route* v4lookup(uchar *a); extern Route* v6lookup(uchar *a); extern long routeread(char*, ulong, int); extern long routewrite(Chan*, char*, int); | |
| 1997/0327 | /* | |
| 1998/0306 | * arp.c */ struct Arpent { uchar ip[IPaddrlen]; uchar mac[MAClen]; Medium *type; /* media type */ Arpent* hash; Block* hold; Block* last; uint time; uint used; uchar state; }; extern int arpread(char*, ulong, int); extern int arpwrite(char*, int); extern Arpent* arpget(Block *bp, int version, Medium *type, uchar *ip, uchar *h); extern void arprelease(Arpent *a); extern Block* arpresolve(Arpent *a, Medium *type, uchar *mac); extern void arpenter(Ipifc *ifc, int version, uchar *ip, uchar *mac, Medium *type, int norefresh); /* | |
| 1997/0327 | * ipaux.c */ | |
| 1997/0423 |
| |
| 1998/0306 | typedef struct Cmdbuf Cmdbuf; struct Cmdbuf { char buf[64]; char *f[16]; int nf; }; extern int myetheraddr(uchar*, char*); extern ulong parseip(uchar*, char*); extern ulong parseipmask(uchar*, char*); extern void maskip(uchar *from, uchar *mask, uchar *to); extern int parsemac(uchar *to, char *from, int len); extern uchar* defmask(uchar*); extern int isv4(uchar*); extern void v4tov6(uchar *v6, uchar *v4); extern int v6tov4(uchar *v4, uchar *v6); extern Cmdbuf* parsecmd(char *a, int n); extern int eipconv(va_list *arg, Fconv *f); #define ipcmp(x, y) memcmp(x, y, IPaddrlen) #define ipmove(x, y) memmove(x, y, IPaddrlen) extern uchar IPv4bcast[IPaddrlen]; extern uchar IPv4bcastobs[IPaddrlen]; extern uchar IPv4allsys[IPaddrlen]; extern uchar IPv4allrouter[IPaddrlen]; extern uchar IPnoaddr[IPaddrlen]; extern uchar v4prefix[IPaddrlen]; extern uchar IPallbits[IPaddrlen]; #define msec TK2MS(MACHP(0)->ticks) /* * media */ extern Medium ethermedium; extern Medium nullmedium; extern Medium pktmedium; extern Proto ipifc; /* * ipifc.c */ extern Medium* ipfindmedium(char *name); extern int ipforme(uchar *addr); extern int ipismulticast(uchar *); extern Ipifc* findipifc(uchar *remote, int type); extern void findlocalip(uchar *local, uchar *remote); extern int ipv4local(Ipifc *ifc, uchar *addr); extern int ipv6local(Ipifc *ifc, uchar *addr); extern Iplifc* iplocalonifc(Ipifc *ifc, uchar *ip); extern int ipproxyifc(Ipifc *ifc, uchar *ip); extern int ipismulticast(uchar *ip); extern int ipisbooting(void); extern int ipifccheckin(Ipifc *ifc, Medium *med); extern void ipifccheckout(Ipifc *ifc); extern int ipifcgrab(Ipifc *ifc); extern void ipifcaddroute(int, uchar*, uchar*, uchar*, int); extern void ipifcremroute(int, uchar*, uchar*); extern void ipifcremmulti(Conv *c, uchar *ma, uchar *ia); extern void ipifcaddmulti(Conv *c, uchar *ma, uchar *ia); extern char* ipifcrem(Ipifc *ifc, char **argv, int argc, int dolock); extern char* ipifcadd(Ipifc *ifc, char **argv, int argc); /* * ip.c */ extern void closeifcconv(Ifcconv*); extern void icmpnoconv(Block*); extern void initfrag(int); extern ushort ipcsum(uchar*); extern void (*ipextprotoiput)(Block*); extern void ipiput(uchar*, Block*); extern void ipoput(Block*, int, int); extern int ipstats(char*, int); extern uchar* logctl(uchar*); extern Ifcconv* newifcconv(void); extern void (*pktifcrcv)(Conv*, Block*); extern ushort ptclbsum(uchar*, int); extern ushort ptclcsum(Block*, int, int); /* * iprouter.c */ void useriprouter(uchar*, Block*); void iprouteropen(void); void iprouterclose(void); long iprouterread(void*, int); /* * global to all of the stack */ extern int debug; extern Fs fs; extern int iprouting; /* true if routing turned on */ extern void (*igmpreportfn)(Ipifc*, uchar*); | |
| 1998/0306/sys/src/9/ip/ip.h:116,121 – 1998/0307/sys/src/9/ip/ip.h:116,123 (short | long) | ||
| 1998/0306 | /* for routing multicast groups */ void (*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia, uchar **iap); void (*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); | |
| 1998/0307 | int unbindonclose; /* if non-zero, unbind on last close */ | |
| 1997/0327 | }; | |
| 1998/0306 | /* logical interface associated with a physical one */ | |
| 1998/0306/sys/src/9/ip/ip.h:132,140 – 1998/0307/sys/src/9/ip/ip.h:134,142 | ||
| 1998/0306 | /* binding twixt Ipself and Ipifc */ struct Iplink | |
| 1997/0423 | { | |
| 1998/0306 |
| |
| 1998/0307 | Ipself *self; | |
| 1998/0306 | Iplifc *lifc; | |
| 1998/0307 | Iplink *selflink; /* next link for this local address */ | |
| 1998/0306 | Iplink *lifclink; /* next link for this ifc */ ulong expire; Iplink *next; /* free list */ | |
| 1998/0307/sys/src/9/ip/ip.h:340,345 – 1998/0310/sys/src/9/ip/ip.h:340,346 (short | long) | ||
| 1998/0306 | extern Route* v6lookup(uchar *a); extern long routeread(char*, ulong, int); extern long routewrite(Chan*, char*, int); | |
| 1998/0310 | extern void routetype(int, char*); | |
| 1998/0306 | ||
| 1997/0327 | /* | |
| 1998/0306 | * arp.c | |
| 1998/0307/sys/src/9/ip/ip.h:432,437 – 1998/0310/sys/src/9/ip/ip.h:433,439 | ||
| 1998/0306 | extern void ipifcaddmulti(Conv *c, uchar *ma, uchar *ia); extern char* ipifcrem(Ipifc *ifc, char **argv, int argc, int dolock); extern char* ipifcadd(Ipifc *ifc, char **argv, int argc); | |
| 1998/0310 | extern long ipselftabread(char *a, ulong offset, int n); | |
| 1998/0306 | /* * ip.c | |
| 1998/0310/sys/src/9/ip/ip.h:2,18 – 1998/0313/sys/src/9/ip/ip.h:2,23 (short | long) | ||
| 1997/0327 | typedef struct Fs Fs; typedef union Hwaddr Hwaddr; | |
| 1997/0423 | typedef struct Ifcconv Ifcconv; | |
| 1998/0313 | typedef struct IP IP; | |
| 1998/0306 | typedef struct Ipself Ipself; | |
| 1998/0313 | typedef struct Ipselftab Ipselftab; | |
| 1998/0306 | typedef struct Iplink Iplink; typedef struct Iplifc Iplifc; typedef struct Ipmulti Ipmulti; | |
| 1997/0327 | typedef struct Iproute Iproute; | |
| 1998/0313 | typedef struct IProuter IProuter; | |
| 1998/0306 | typedef struct Ipifc Ipifc; | |
| 1998/0313 | typedef struct Log Log; | |
| 1998/0306 | typedef struct Medium Medium; | |
| 1997/0327 | typedef struct Proto Proto; typedef struct Pstate Pstate; typedef struct Tcpc Tcpc; | |
| 1998/0306 | typedef struct Arpent Arpent; | |
| 1998/0313 | typedef struct Arp Arp; | |
| 1998/0306 | typedef struct Route Route; | |
| 1997/0327 | enum | |
| 1998/0310/sys/src/9/ip/ip.h:34,39 – 1998/0313/sys/src/9/ip/ip.h:39,47 | ||
| 1998/0306 | /* ip versions */ V4= 4, V6= 6, | |
| 1998/0313 | /* 2^Lroot trees in the root table */ Lroot = 10, | |
| 1997/0327 | }; enum | |
| 1998/0310/sys/src/9/ip/ip.h:106,112 – 1998/0313/sys/src/9/ip/ip.h:114,120 | ||
| 1998/0306 | void (*remmulti)(Ipifc *ifc, uchar *a, uchar *ia); /* process packets written to 'data' */ | |
| 1998/0313 | void (*pktin)(Fs *f, Ipifc *ifc, Block *bp); | |
| 1998/0306 | /* routes for router boards */ void (*addroute)(Ipifc *ifc, int, uchar*, uchar*, uchar*, int); | |
| 1998/0310/sys/src/9/ip/ip.h:114,120 – 1998/0313/sys/src/9/ip/ip.h:122,128 | ||
| 1998/0306 | void (*flushroutes)(Ipifc *ifc); /* for routing multicast groups */ | |
| 1998/0313 | void (*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia); | |
| 1998/0306 | void (*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); | |
| 1998/0307 | int unbindonclose; /* if non-zero, unbind on last close */ | |
| 1998/0310/sys/src/9/ip/ip.h:196,208 – 1998/0313/sys/src/9/ip/ip.h:204,217 | ||
| 1998/0306 | int (*state)(Conv*, char*, int); | |
| 1997/0327 | void (*create)(Conv*); void (*close)(Conv*); | |
| 1998/0306 |
| |
| 1998/0313 | void (*rcv)(Proto*, uchar*, Block*); | |
| 1997/0327 | char* (*ctl)(Conv*, char**, int); | |
| 1997/0916 |
| |
| 1998/0313 | void (*advise)(Proto*, Block*, char*); int (*stats)(Proto*, char*, int); | |
| 1998/0306 | int (*local)(Conv*, char*, int); int (*inuse)(Conv*); | |
| 1997/0327 | ||
| 1998/0313 | Fs *f; /* file system this proto is part of */ | |
| 1997/0327 | Conv **conv; /* array of conversations */ int ptclsize; /* size of per protocol ctl block */ int nc; /* number of conversations */ | |
| 1998/0310/sys/src/9/ip/ip.h:211,223 – 1998/0313/sys/src/9/ip/ip.h:220,240 | ||
| 1997/0327 | ushort nextport; ushort nextrport; | |
| 1998/0313 | void *priv; | |
| 1997/0327 | }; | |
| 1998/0313 | /* * Stream for sending packets to user level */ struct IProuter { QLock; int opens; Queue *q; }; /* * one per IP protocol stack */ | |
| 1997/0327 | struct Fs { Lock; | |
| 1998/0310/sys/src/9/ip/ip.h:225,233 – 1998/0313/sys/src/9/ip/ip.h:242,263 | ||
| 1997/0327 | int np; Proto* p[Maxproto+1]; /* list of supported protocols */ Proto* t2p[256]; /* vector of all ip protocol handlers */ | |
| 1998/0313 | Proto* ipifc; /* kludge for ipifcremroute & ipifcaddroute */ IP *ip; Ipselftab *self; Arp *arp; IProuter iprouter; Route *v4root[1<<Lroot]; /* v4 routing forest */ Route *v6root[1<<Lroot]; /* v6 routing forest */ Route *queue; /* used as temp when reinjecting routes */ Log *alog; | |
| 1997/0327 | }; | |
| 1998/0306 |
| |
| 1998/0313 | int Fsconnected(Conv*, char*); Conv* Fsnewcall(Conv*, uchar*, ushort, uchar*, ushort); | |
| 1997/0327 | int Fspcolstats(char*, int); int Fsproto(Fs*, Proto*); | |
| 1998/0306 | int Fsbuiltinproto(Fs*, uchar); | |
| 1998/0310/sys/src/9/ip/ip.h:258,273 – 1998/0313/sys/src/9/ip/ip.h:288,300 | ||
| 1997/0806 | Logipmsg= 1<<14, | |
| 1997/0327 | }; | |
| 1998/0306 |
| |
| 1998/0313 | void netloginit(Fs*); void netlogopen(Fs*); void netlogclose(Fs*); char* netlogctl(Fs*, char*, int); long netlogread(Fs*, void*, ulong, long); void netlog(Fs*, int, char*, ...); | |
| 1997/0327 |
| |
| 1998/0306 | /* * iproute.c */ | |
| 1998/0310/sys/src/9/ip/ip.h:332,346 – 1998/0313/sys/src/9/ip/ip.h:359,375 | ||
| 1998/0306 | V4route v4; }; }; | |
| 1998/0313 | extern void v4addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); extern void v6addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); extern void v4delroute(Fs *f, uchar *a, uchar *mask); extern void v6delroute(Fs *f, uchar *a, uchar *mask); extern Route* v4lookup(Fs *f, uchar *a); extern Route* v6lookup(Fs *f, uchar *a); extern long routeread(Fs *f, char*, ulong, int); extern long routewrite(Fs *f, Chan*, char*, int); | |
| 1998/0310 | extern void routetype(int, char*); | |
| 1998/0313 | extern void ipwalkroutes(Fs*, Routewalk*); extern void convroute(Route*, uchar*, uchar*, uchar*, char*, int*); | |
| 1998/0306 | ||
| 1997/0327 | /* | |
| 1998/0306 | * arp.c | |
| 1998/0310/sys/src/9/ip/ip.h:358,369 – 1998/0313/sys/src/9/ip/ip.h:387,399 | ||
| 1998/0306 | uchar state; }; | |
| 1998/0313 | extern void arpinit(Fs*); extern int arpread(Arp*, char*, ulong, int); extern int arpwrite(Arp*, char*, int); extern Arpent* arpget(Arp*, Block *bp, int version, Medium *type, uchar *ip, uchar *h); extern void arprelease(Arp*, Arpent *a); extern Block* arpresolve(Arp*, Arpent *a, Medium *type, uchar *mac); extern void arpenter(Arp*, Ipifc *ifc, int version, uchar *ip, uchar *mac, Medium *type, int norefresh); | |
| 1998/0306 | /* | |
| 1997/0327 | * ipaux.c | |
| 1998/0310/sys/src/9/ip/ip.h:408,413 – 1998/0313/sys/src/9/ip/ip.h:438,444 | ||
| 1998/0306 | extern Medium ethermedium; extern Medium nullmedium; extern Medium pktmedium; | |
| 1998/0313 | extern Medium tripmedium; | |
| 1998/0306 | extern Proto ipifc; /* | |
| 1998/0310/sys/src/9/ip/ip.h:414,464 – 1998/0313/sys/src/9/ip/ip.h:445,507 | ||
| 1998/0306 | * ipifc.c */ extern Medium* ipfindmedium(char *name); | |
| 1998/0313 | extern int ipforme(Fs*, uchar *addr); | |
| 1998/0306 | extern int ipismulticast(uchar *); | |
| 1998/0313 | extern Ipifc* findipifc(Fs*, uchar *remote, int type); extern void findlocalip(Fs*, uchar *local, uchar *remote); | |
| 1998/0306 | extern int ipv4local(Ipifc *ifc, uchar *addr); extern int ipv6local(Ipifc *ifc, uchar *addr); extern Iplifc* iplocalonifc(Ipifc *ifc, uchar *ip); | |
| 1998/0313 | extern int ipproxyifc(Fs *f, Ipifc *ifc, uchar *ip); | |
| 1998/0306 | extern int ipismulticast(uchar *ip); extern int ipisbooting(void); extern int ipifccheckin(Ipifc *ifc, Medium *med); extern void ipifccheckout(Ipifc *ifc); extern int ipifcgrab(Ipifc *ifc); | |
| 1998/0313 | extern void ipifcaddroute(Fs*, int, uchar*, uchar*, uchar*, int); extern void ipifcremroute(Fs*, int, uchar*, uchar*); | |
| 1998/0306 | extern void ipifcremmulti(Conv *c, uchar *ma, uchar *ia); extern void ipifcaddmulti(Conv *c, uchar *ma, uchar *ia); extern char* ipifcrem(Ipifc *ifc, char **argv, int argc, int dolock); extern char* ipifcadd(Ipifc *ifc, char **argv, int argc); | |
| 1998/0310 |
| |
| 1998/0313 | extern long ipselftabread(Fs*, char *a, ulong offset, int n); | |
| 1998/0306 | /* * ip.c */ extern void closeifcconv(Ifcconv*); | |
| 1998/0313 | extern void icmpnoconv(Fs*, Block*); extern void initfrag(IP*, int); | |
| 1998/0306 | extern ushort ipcsum(uchar*); extern void (*ipextprotoiput)(Block*); | |
| 1998/0313 | extern void ipiput(Fs*, uchar*, Block*); extern void ipoput(Fs*, Block*, int, int); extern int ipstats(Fs*, char*, int); | |
| 1998/0306 | extern uchar* logctl(uchar*); | |
| 1998/0313 | extern void ip_init(Fs*); | |
| 1998/0306 | /* | |
| 1998/0313 | * bootp.c */ extern char* bootp(Ipifc*); extern int bootpread(char*, ulong, int); /* | |
| 1998/0306 | * iprouter.c */ | |
| 1998/0313 | void useriprouter(Fs*, uchar*, Block*); void iprouteropen(Fs*); void iprouterclose(Fs*); long iprouterread(Fs*, void*, int); /* * resolving inferno/plan9 differences */ Chan* commonfdtochan(int, int, int, int); char* commonuser(void); char* commonerror(void); | |
| 1998/0306 | /* * global to all of the stack | |
| 1998/0313/sys/src/9/ip/ip.h:439,445 – 1998/0314/sys/src/9/ip/ip.h:439,444 (short | long) | ||
| 1998/0306 | extern Medium nullmedium; extern Medium pktmedium; | |
| 1998/0313 | extern Medium tripmedium; | |
| 1998/0306 |
| |
| 1998/0313/sys/src/9/ip/ip.h:469,474 – 1998/0314/sys/src/9/ip/ip.h:468,474 | ||
| 1998/0306 | /* * ip.c */ | |
| 1998/0314 | extern void iprouting(Fs*, int); | |
| 1998/0306 | extern void closeifcconv(Ifcconv*); | |
| 1998/0313 | extern void icmpnoconv(Fs*, Block*); extern void initfrag(IP*, int); | |
| 1998/0313/sys/src/9/ip/ip.h:508,512 – 1998/0314/sys/src/9/ip/ip.h:508,511 | ||
| 1998/0306 | */ extern int debug; extern Fs fs; | |
| 1998/0314/sys/src/9/ip/ip.h:8,14 – 1998/0316/sys/src/9/ip/ip.h:8,13 (short | long) | ||
| 1998/0306 | typedef struct Iplink Iplink; typedef struct Iplifc Iplifc; typedef struct Ipmulti Ipmulti; | |
| 1997/0327 |
| |
| 1998/0313 | typedef struct IProuter IProuter; | |
| 1998/0306 | typedef struct Ipifc Ipifc; | |
| 1998/0313 | typedef struct Log Log; | |
| 1998/0316/sys/src/9/ip/ip.h:8,13 – 1998/0324/sys/src/9/ip/ip.h:8,14 (short | long) | ||
|
Add Ipmux.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1998/0306 | typedef struct Iplink Iplink; typedef struct Iplifc Iplifc; typedef struct Ipmulti Ipmulti; | |
| 1998/0324 | typedef struct Ipmux Ipmux; | |
| 1998/0313 | typedef struct IProuter IProuter; | |
| 1998/0306 | typedef struct Ipifc Ipifc; | |
| 1998/0313 | typedef struct Log Log; | |
| 1998/0316/sys/src/9/ip/ip.h:241,247 – 1998/0324/sys/src/9/ip/ip.h:242,250 | ||
| 1997/0327 | int np; Proto* p[Maxproto+1]; /* list of supported protocols */ Proto* t2p[256]; /* vector of all ip protocol handlers */ | |
| 1998/0324 | Ipmux* t2m[256]; /* vector of all ip multiplexors */ | |
| 1998/0313 | Proto* ipifc; /* kludge for ipifcremroute & ipifcaddroute */ | |
| 1998/0324 | Proto* ipmux; /* kludge for finding an ip multiplexor */ | |
| 1998/0313 | IP *ip; Ipselftab *self; | |
| 1998/0324/sys/src/9/ip/ip.h:237,243 – 1998/0325/sys/src/9/ip/ip.h:237,243 (short | long) | ||
|
Change Lock to RWlock in Fs.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1998/0313 | */ | |
| 1997/0327 | struct Fs { | |
| 1998/0325 | RWlock; | |
| 1997/0327 | int np; Proto* p[Maxproto+1]; /* list of supported protocols */ | |
| 1998/0325/sys/src/9/ip/ip.h:241,248 – 1998/0327/sys/src/9/ip/ip.h:241,247 (short | long) | ||
|
Remove t2m.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1997/0327 | int np; Proto* p[Maxproto+1]; /* list of supported protocols */ | |
| 1998/0324 |
| |
| 1998/0327 | Proto* t2p[256]; /* vector of all protocols */ | |
| 1998/0313 | Proto* ipifc; /* kludge for ipifcremroute & ipifcaddroute */ | |
| 1998/0324 | Proto* ipmux; /* kludge for finding an ip multiplexor */ | |
| 1998/0313 | ||
| 1998/0327/sys/src/9/ip/ip.h:411,416 – 1998/0328/sys/src/9/ip/ip.h:411,417 (short | long) | ||
|
Add v4parseip.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1998/0306 | extern int myetheraddr(uchar*, char*); extern ulong parseip(uchar*, char*); extern ulong parseipmask(uchar*, char*); | |
| 1998/0328 | extern char* v4parseip(uchar*, char*); | |
| 1998/0306 | extern void maskip(uchar *from, uchar *mask, uchar *to); extern int parsemac(uchar *to, char *from, int len); extern uchar* defmask(uchar*); | |
| 1998/0328/sys/src/9/ip/ip.h:446,451 – 1998/0423/sys/src/9/ip/ip.h:446,452 (short | long) | ||
|
Add addipmedium to avoid hard-coded list of media.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1998/0306 | * ipifc.c */ extern Medium* ipfindmedium(char *name); | |
| 1998/0423 | extern void addipmedium(Medium *med); | |
| 1998/0313 | extern int ipforme(Fs*, uchar *addr); | |
| 1998/0306 | extern int ipismulticast(uchar *); | |
| 1998/0313 | extern Ipifc* findipifc(Fs*, uchar *remote, int type); | |
| 1998/0423/sys/src/9/ip/ip.h:264,269 – 1998/0509/sys/src/9/ip/ip.h:264,270 (short | long) | ||
| 1998/0306 | int Fsbuiltinproto(Fs*, uchar); | |
| 1997/0327 | Conv* Fsprotoclone(Proto*, char*); | |
| 1998/0306 | Proto* Fsrcvpcol(Fs*, uchar); | |
| 1998/0509 | Proto* Fsrcvpcolx(Fs*, uchar); | |
| 1997/0327 | char* Fsstdconnect(Conv*, char**, int); | |
| 1997/0403 | char* Fsstdannounce(Conv*, char**, int); | |
| 1998/0306 | char* Fsstdbind(Conv*, char**, int); | |
| 1998/0509/sys/src/9/ip/ip.h:125,130 – 1998/0630/sys/src/9/ip/ip.h:125,132 (short | long) | ||
| 1998/0313 | void (*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia); | |
| 1998/0306 | void (*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); | |
| 1998/0307 | ||
| 1998/0630 | void (*ares)(Fs*, int, uchar*, uchar*, int, int); | |
| 1998/0307 | int unbindonclose; /* if non-zero, unbind on last close */ | |
| 1997/0327 | }; | |
| 1998/0509/sys/src/9/ip/ip.h:288,293 – 1998/0630/sys/src/9/ip/ip.h:290,298 | ||
| 1997/0423 | Logigmp= 1<<12, | |
| 1997/0806 | Logudpmsg= 1<<13, Logipmsg= 1<<14, | |
| 1998/0630 | Logrudp= 1<<15, Logrudpmsg= 1<<16, | |
| 1997/0327 | }; | |
| 1998/0313 | void netloginit(Fs*); | |
| 1998/0509/sys/src/9/ip/ip.h:363,370 – 1998/0630/sys/src/9/ip/ip.h:368,375 | ||
| 1998/0306 | }; | |
| 1998/0313 | extern void v4addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); extern void v6addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); | |
| 1998/0630 | extern void v4delroute(Fs *f, uchar *a, uchar *mask, int dolock); extern void v6delroute(Fs *f, uchar *a, uchar *mask, int dolock); | |
| 1998/0313 | extern Route* v4lookup(Fs *f, uchar *a); extern Route* v6lookup(Fs *f, uchar *a); extern long routeread(Fs *f, char*, ulong, int); | |
| 1998/0509/sys/src/9/ip/ip.h:391,401 – 1998/0630/sys/src/9/ip/ip.h:396,406 | ||
| 1998/0306 | ||
| 1998/0313 | extern void arpinit(Fs*); extern int arpread(Arp*, char*, ulong, int); | |
| 1998/0630 | extern int arpwrite(Fs*, char*, int); | |
| 1998/0313 | extern Arpent* arpget(Arp*, Block *bp, int version, Medium *type, uchar *ip, uchar *h); extern void arprelease(Arp*, Arpent *a); extern Block* arpresolve(Arp*, Arpent *a, Medium *type, uchar *mac); | |
| 1998/0630 | extern void arpenter(Fs*, int version, uchar *ip, uchar *mac, int len, int norefresh); | |
| 1998/0306 | /* | |
| 1997/0327 | * ipaux.c | |
| 1998/0630/sys/src/9/ip/ip.h:454,459 – 1998/0728/sys/src/9/ip/ip.h:454,460 (short | long) | ||
| 1998/0306 | extern Medium* ipfindmedium(char *name); | |
| 1998/0423 | extern void addipmedium(Medium *med); | |
| 1998/0313 | extern int ipforme(Fs*, uchar *addr); | |
| 1998/0728 | extern int ipisbm(uchar *); | |
| 1998/0306 | extern int ipismulticast(uchar *); | |
| 1998/0313 | extern Ipifc* findipifc(Fs*, uchar *remote, int type); extern void findlocalip(Fs*, uchar *local, uchar *remote); | |
| 1998/0728/sys/src/9/ip/ip.h:481,486 – 1998/0813/sys/src/9/ip/ip.h:481,487 (short | long) | ||
| 1998/0314 | extern void iprouting(Fs*, int); | |
| 1998/0306 | extern void closeifcconv(Ifcconv*); | |
| 1998/0313 | extern void icmpnoconv(Fs*, Block*); | |
| 1998/0813 | extern void icmpttlexceeded(Fs*, uchar*, Block*); | |
| 1998/0313 | extern void initfrag(IP*, int); | |
| 1998/0306 | extern ushort ipcsum(uchar*); extern void (*ipextprotoiput)(Block*); | |
| 1998/0813/sys/src/9/ip/ip.h:322,328 – 1998/0815/sys/src/9/ip/ip.h:322,329 (short | long) | ||
| 1998/0306 | Rmulti= (1<<5), /* a multicast self address */ }; | |
| 1997/0327 | ||
| 1998/0306 |
| |
| 1998/0815 | struct Routewalk { | |
| 1998/0306 | int n; int o; int h; | |
| 1998/0815/sys/src/9/ip/ip.h:240,245 – 1998/0924/sys/src/9/ip/ip.h:240,246 (short | long) | ||
| 1997/0327 | struct Fs { | |
| 1998/0325 | RWlock; | |
| 1998/0924 | int dev; | |
| 1997/0327 | int np; Proto* p[Maxproto+1]; /* list of supported protocols */ | |
| Too many diffs (26 > 25). Stopping. | ||