1 #pragma src "/sys/src/libip" 2 #pragma lib "libip.a" 3 4 enum 5 { 6 IPaddrlen= 16, 7 IPv4addrlen= 4, 8 IPv4off= 12, 9 IPllen= 4, 10 }; 11 12 /* 13 * for reading /net/ipifc 14 */ 15 typedef struct Ipifc Ipifc; 16 typedef struct Iplifc Iplifc; 17 typedef struct Ipv6rp Ipv6rp; 18 19 /* local address */ 20 struct Iplifc 21 { 22 Iplifc *next; 23 24 /* per address on the ip interface */ 25 uchar ip[IPaddrlen]; 26 uchar mask[IPaddrlen]; 27 uchar net[IPaddrlen]; /* ip & mask */ 28 ulong preflt; /* preferred lifetime */ 29 ulong validlt; /* valid lifetime */ 30 }; 31 32 /* default values, one per stack */ 33 struct Ipv6rp 34 { 35 int mflag; 36 int oflag; 37 int maxraint; 38 int minraint; 39 int linkmtu; 40 int reachtime; 41 int rxmitra; 42 int ttl; 43 int routerlt; 44 }; 45 46 /* actual interface */ 47 struct Ipifc 48 { 49 Ipifc *next; 50 Iplifc *lifc; 51 52 /* per ip interface */ 53 int index; /* number of interface in ipifc dir */ 54 char dev[64]; 55 uchar sendra6; /* on == send router adv */ 56 uchar recvra6; /* on == rcv router adv */ 57 int mtu; 58 ulong pktin; 59 ulong pktout; 60 ulong errin; 61 ulong errout; 62 Ipv6rp rp; 63 }; 64 65 /* 66 * user level udp headers with control message "headers" 67 */ 68 enum 69 { 70 Udphdrsize= 52, /* size of a Udphdr */ 71 }; 72 73 typedef struct Udphdr Udphdr; 74 struct Udphdr 75 { 76 uchar raddr[IPaddrlen]; /* V6 remote address */ 77 uchar laddr[IPaddrlen]; /* V6 local address */ 78 uchar ifcaddr[IPaddrlen]; /* V6 ifc addr msg was received on */ 79 uchar rport[2]; /* remote port */ 80 uchar lport[2]; /* local port */ 81 }; 82 83 uchar* defmask(uchar*); 84 void maskip(uchar*, uchar*, uchar*); 85 int eipfmt(Fmt*); 86 int isv4(uchar*); 87 ulong parseip(uchar*, char*); 88 ulong parseipmask(uchar*, char*); 89 char* v4parseip(uchar*, char*); 90 char* v4parsecidr(uchar*, uchar*, char*); 91 int parseether(uchar*, char*); 92 int myipaddr(uchar*, char*); 93 int myetheraddr(uchar*, char*); 94 int equivip4(uchar*, uchar*); 95 int equivip6(uchar*, uchar*); 96 97 Ipifc* readipifc(char*, Ipifc*, int); 98 99 void hnputv(void*, uvlong); 100 void hnputl(void*, uint); 101 void hnputs(void*, ushort); 102 uvlong nhgetv(void*); 103 uint nhgetl(void*); 104 ushort nhgets(void*); 105 ushort ptclbsum(uchar*, int); 106 107 int v6tov4(uchar*, uchar*); 108 void v4tov6(uchar*, uchar*); 109 110 #define ipcmp(x, y) memcmp(x, y, IPaddrlen) 111 #define ipmove(x, y) memmove(x, y, IPaddrlen) 112 113 extern uchar IPv4bcast[IPaddrlen]; 114 extern uchar IPv4bcastobs[IPaddrlen]; 115 extern uchar IPv4allsys[IPaddrlen]; 116 extern uchar IPv4allrouter[IPaddrlen]; 117 extern uchar IPnoaddr[IPaddrlen]; 118 extern uchar v4prefix[IPaddrlen]; 119 extern uchar IPallbits[IPaddrlen]; 120 121 #define CLASS(p) ((*(uchar*)(p))>>6) 122 123 #pragma varargck type "I" uchar* 124 #pragma varargck type "V" uchar* 125 #pragma varargck type "E" uchar* 126 #pragma varargck type "M" uchar* 127