| #pragma src "/sys/src/libip" |
| #pragma lib "libip.a" |
| |
| enum |
| { |
| IPaddrlen= 16, |
| IPv4addrlen= 4, |
| IPv4off= 12, |
| IPllen= 4, |
| }; |
| |
| /* |
| * for reading /net/ipifc |
| */ |
| typedef struct Ipifc Ipifc; |
| typedef struct Ipifcs Ipifcs; |
| |
| struct Ipifc |
| { |
| char dev[64]; |
| uchar ip[IPaddrlen]; |
| uchar mask[IPaddrlen]; |
| uchar net[IPaddrlen]; /* ip & mask */ |
| Ipifc *next; |
| }; |
| |
| struct Ipifcs |
| { |
| Ipifc *first; |
| Ipifc *last; |
| }; |
| |
| /* |
| * user level udp headers |
| */ |
| enum |
| { |
| Udphdrsize= 36, /* size of a Udphdr */ |
| }; |
| |
| typedef struct Udphdr Udphdr; |
| struct Udphdr |
| { |
| uchar raddr[IPaddrlen]; /* remote address and port */ |
| uchar laddr[IPaddrlen]; /* local address and port */ |
| uchar rport[2]; |
| uchar lport[2]; |
| }; |
| |
| uchar* defmask(uchar*); |
| void maskip(uchar*, uchar*, uchar*); |
| int eipconv(va_list*, Fconv*); |
| ulong parseip(uchar*, char*); |
| ulong parseipmask(uchar*, char*); |
| int parseether(uchar*, char*); |
| int myipaddr(uchar*, char*); |
| int myetheraddr(uchar*, char*); |
| |
| void readipifc(char*, Ipifcs*); |
| |
| void hnputl(void*, uint); |
| void hnputs(void*, ushort); |
| uint nhgetl(void*); |
| ushort nhgets(void*); |
| |
| #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 CLASS(p) ((*(uchar*)(p))>>6) |