| plan 9 kernel history: overview | file list | diff list |
1997/0806/ip/ip.h (diff list | history)
| ip/ip.h on 1997/0327 | ||
| 1997/0327 | typedef ulong Ipaddr; typedef uchar byte; 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; enum { Addrlen= 64, Maxproto= 20, Nhash= 64, Maxincall= 5, Nchans= 256, 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 { Announcing= 1, Announced= 2, Connecting= 3, Connected= 4, }; /* * contained in each conversation */ struct Conv { Lock; int x; /* conversation index */ Proto* p; Ipaddr laddr; /* local IP address */ Ipaddr raddr; /* remote IP address */ int restricted; /* remote port is restricted */ ushort lport; /* local port number */ ushort rport; /* remote port number */ uint ttl; /* max time to live */ char owner[NAMELEN]; /* protections */ int perm; int inuse; /* opens of listen/data/ctl */ int length; int state; /* udp specific */ int headers; /* data src/dst headers in udp */ int reliable; /* true if reliable udp */ Conv* incall; /* calls waiting to be listened for */ Conv* next; Queue* rq; /* queued data waiting to be read */ Queue* wq; /* queued data waiting to be written */ Queue* eq; /* returned error packets */ QLock car; Rendez cr; char cerr[ERRLEN]; QLock listenq; Rendez listenr; void* ptcl; /* protocol specific stuff */ }; union Hwaddr { byte ether[6]; }; enum { METHER, /* Media types */ MFDDI, 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; Ipaddr mynetmask; Ipaddr remip; /* Address of remote side */ byte netmyip[4]; /* In Network byte order */ int arping; /* true if we mus arp */ int maxmtu; /* Maximum transfer unit */ int minmtu; /* Minumum tranfer unit */ int hsize; /* Media header size */ Hwaddr; ulong in, out; /* message statistics */ ulong inerr, outerr; /* ... */ 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*); int Mediaforpt2pt(byte*); Ipaddr Mediagetsrc(byte*); void Mediaclose(Media*); char* Mediaopen(int, char*, Conv*, Ipaddr, Ipaddr, Ipaddr, int, Media**); Media* Mediaroute(byte*, byte*); void Mediasetaddr(Media*, Ipaddr, Ipaddr); void Mediasetraddr(Media*, Ipaddr); Ipaddr Mediagetaddr(Media*); Ipaddr Mediagetraddr(Media*); void Mediawrite(Media*, Block*, byte*); | |
| 1997/0417 | int Mediaifcread(char*, ulong, int); | |
| 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 */ struct Proto { Lock; char* name; /* protocol name */ int x; /* protocol index */ int ipproto; /* ip protocol type */ 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/0423 | void (*rcv)(Media*, Block*); | |
| 1997/0327 | char* (*ctl)(Conv*, char**, int); void (*advise)(Block*, char*); Conv **conv; /* array of conversations */ int ptclsize; /* size of per protocol ctl block */ int nc; /* number of conversations */ int ac; Qid qid; /* qid for protocol directory */ ushort nextport; ushort nextrport; ulong csumerr; /* checksum errors */ ulong hlenerr; /* header length error */ ulong lenerr; /* short packet */ ulong order; /* out of order */ ulong rexmit; /* retransmissions */ | |
| 1997/0806 | ulong wclosed; /* window closed */ | |
| 1997/0327 | }; struct Fs { Lock; int np; Proto* p[Maxproto+1]; /* list of supported protocols */ Proto* t2p[256]; /* vector of all ip protocol handlers */ }; int Fsconnected(Fs*, Conv*, char*); Conv* Fsnewcall(Fs*, Conv*, Ipaddr, ushort, Ipaddr, ushort); int Fspcolstats(char*, int); int Fsproto(Fs*, Proto*); int Fsbuiltinproto(Fs*, byte); 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 { Logip= 1<<1, Logtcp= 1<<2, Logfs= 1<<3, Logil= 1<<4, Logicmp= 1<<5, Logudp= 1<<6, Logcompress= 1<<7, Logilmsg= 1<<8, Loggre= 1<<9, 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 */ extern Ipaddr iponly; /* ip address to print debugging for */ void netlogopen(void); void netlogclose(void); char* netlogctl(char*, int); long netlogread(void*, ulong, long); void netlog(int, char*, ...); #define msec TK2MS(MACHP(0)->ticks) /* Globals */ extern int debug; 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*); void fatal(byte*, ...); void hnputl(byte*, ulong); void hnputs(byte*, ushort); void initfrag(int); 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*); 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); /* * ipaux.c */ int myetheraddr(uchar*, char*); | |
| 1997/0423 | ulong parseip(uchar*, char*); | |