| #ifndef _IP_H_ |
| #define _IP_H_ 1 |
| #if defined(__cplusplus) |
| extern "C" { |
| #endif |
| |
| AUTOLIB(ip) |
| /* |
| #pragma src "/sys/src/libip" |
| #pragma lib "libip.a" |
| #pragma varargck type "I" uchar* |
| #pragma varargck type "V" uchar* |
| #pragma varargck type "E" uchar* |
| #pragma varargck type "M" uchar* |
| */ |
| enum |
| { |
| IPaddrlen= 16, |
| IPv4addrlen= 4, |
| IPv4off= 12, |
| IPllen= 4 |
| }; |
| |
| /* |
| * for reading /net/ipifc |
| */ |
| typedef struct Ipifc Ipifc; |
| typedef struct Iplifc Iplifc; |
| typedef struct Ipv6rp Ipv6rp; |
| |
| /* local address */ |
| struct Iplifc |
| { |
| Iplifc *next; |
| |
| /* per address on the ip interface */ |
| uchar ip[IPaddrlen]; |
| uchar mask[IPaddrlen]; |
| uchar net[IPaddrlen]; /* ip & mask */ |
| ulong preflt; /* preferred lifetime */ |
| ulong validlt; /* valid lifetime */ |
| }; |
| |
| /* default values, one per stack */ |
| struct Ipv6rp |
| { |
| int mflag; |
| int oflag; |
| int maxraint; |
| int minraint; |
| int linkmtu; |
| int reachtime; |
| int rxmitra; |
| int ttl; |
| int routerlt; |
| }; |
| |
| /* actual interface */ |
| struct Ipifc |
| { |
| Ipifc *next; |
| Iplifc *lifc; |
| |
| /* per ip interface */ |
| int index; /* number of interface in ipifc dir */ |
| char dev[64]; |
| uchar ether[6]; |
| uchar sendra6; /* on == send router adv */ |
| uchar recvra6; /* on == rcv router adv */ |
| int mtu; |
| ulong pktin; |
| ulong pktout; |
| ulong errin; |
| ulong errout; |
| Ipv6rp rp; |
| }; |
| |
| /* |
| * user level udp headers |
| */ |
| enum |
| { |
| Udphdrsize= 52 /* 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 ifcaddr[IPaddrlen]; /* address of ifc message was received from */ |
| uchar rport[2]; |
| uchar lport[2]; |
| }; |
| |
| uchar* defmask(uchar*); |
| void maskip(uchar*, uchar*, uchar*); |
| int eipfmt(Fmt*); |
| int isv4(uchar*); |
| ulong parseip(uchar*, char*); |
| ulong parseipmask(uchar*, char*); |
| char* v4parseip(uchar*, char*); |
| char* v4parsecidr(uchar*, uchar*, char*); |
| int parseether(uchar*, char*); |
| int myipaddr(uchar*, char*); |
| int myetheraddr(uchar*, char*); |
| int equivip(uchar*, uchar*); |
| long udpread(int, Udphdr*, void*, long); |
| long udpwrite(int, Udphdr*, void*, long); |
| |
| Ipifc* readipifc(char*, Ipifc*, int); |
| void freeipifc(Ipifc*); |
| |
| void hnputv(void*, uvlong); |
| void hnputl(void*, uint); |
| void hnputs(void*, ushort); |
| uint nhgetl(void*); |
| uvlong nhgetv(void*); |
| ushort nhgets(void*); |
| ushort ptclbsum(uchar*, int); |
| |
| int v6tov4(uchar*, uchar*); |
| void v4tov6(uchar*, uchar*); |
| |
| #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) |
| |
| #if defined(__cplusplus) |
| } |
| #endif |
| #endif |