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