includes: add ext to the includes path.
authorNathan Binkert <nate@binkert.org>
Tue, 17 Mar 2009 19:49:03 +0000 (12:49 -0700)
committerNathan Binkert <nate@binkert.org>
Tue, 17 Mar 2009 19:49:03 +0000 (12:49 -0700)
move dnet to the correct place so that we use this

--HG--
rename : ext/dnet/dnet/addr.h => ext/dnet/addr.h
rename : ext/dnet/dnet/arp.h => ext/dnet/arp.h
rename : ext/dnet/dnet/blob.h => ext/dnet/blob.h
rename : ext/dnet/dnet/eth.h => ext/dnet/eth.h
rename : ext/dnet/dnet/fw.h => ext/dnet/fw.h
rename : ext/dnet/dnet/icmp.h => ext/dnet/icmp.h
rename : ext/dnet/dnet/intf.h => ext/dnet/intf.h
rename : ext/dnet/dnet/ip.h => ext/dnet/ip.h
rename : ext/dnet/dnet/ip6.h => ext/dnet/ip6.h
rename : ext/dnet/dnet/os.h => ext/dnet/os.h
rename : ext/dnet/dnet/rand.h => ext/dnet/rand.h
rename : ext/dnet/dnet/route.h => ext/dnet/route.h
rename : ext/dnet/dnet/tcp.h => ext/dnet/tcp.h
rename : ext/dnet/dnet/udp.h => ext/dnet/udp.h

30 files changed:
SConstruct
ext/dnet/addr.h [new file with mode: 0644]
ext/dnet/arp.h [new file with mode: 0644]
ext/dnet/blob.h [new file with mode: 0644]
ext/dnet/dnet/addr.h [deleted file]
ext/dnet/dnet/arp.h [deleted file]
ext/dnet/dnet/blob.h [deleted file]
ext/dnet/dnet/eth.h [deleted file]
ext/dnet/dnet/fw.h [deleted file]
ext/dnet/dnet/icmp.h [deleted file]
ext/dnet/dnet/intf.h [deleted file]
ext/dnet/dnet/ip.h [deleted file]
ext/dnet/dnet/ip6.h [deleted file]
ext/dnet/dnet/os.h [deleted file]
ext/dnet/dnet/rand.h [deleted file]
ext/dnet/dnet/route.h [deleted file]
ext/dnet/dnet/tcp.h [deleted file]
ext/dnet/dnet/udp.h [deleted file]
ext/dnet/eth.h [new file with mode: 0644]
ext/dnet/fw.h [new file with mode: 0644]
ext/dnet/icmp.h [new file with mode: 0644]
ext/dnet/intf.h [new file with mode: 0644]
ext/dnet/ip.h [new file with mode: 0644]
ext/dnet/ip6.h [new file with mode: 0644]
ext/dnet/os.h [new file with mode: 0644]
ext/dnet/rand.h [new file with mode: 0644]
ext/dnet/route.h [new file with mode: 0644]
ext/dnet/tcp.h [new file with mode: 0644]
ext/dnet/udp.h [new file with mode: 0644]
ext/gzstream/SConscript

index db6c7f9e53037ab267f05c29a6477eecc90abff4..cd22ab2cc271f103b860d1408b49c1eacc1ee493 100644 (file)
@@ -373,6 +373,9 @@ else:
 Export('base_dir')
 Export('extras_dir_list')
 
+# the ext directory should be on the #includes path
+env.Append(CPPPATH=[Dir('ext')])
+
 # M5_PLY is used by isa_parser.py to find the PLY package.
 env.Append(ENV = { 'M5_PLY' : Dir('ext/ply').abspath })
 
@@ -418,7 +421,6 @@ if env['BATCH']:
 if sys.platform == 'cygwin':
     # cygwin has some header file issues...
     env.Append(CCFLAGS=Split("-Wno-uninitialized"))
-env.Append(CPPPATH=[Dir('ext/dnet')])
 
 # Check for SWIG
 if not env.has_key('SWIG'):
diff --git a/ext/dnet/addr.h b/ext/dnet/addr.h
new file mode 100644 (file)
index 0000000..584e3ab
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * addr.h
+ *
+ * Network address operations.
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: addr.h,v 1.12 2003/02/27 03:44:55 dugsong Exp $
+ */
+
+#ifndef DNET_ADDR_H
+#define DNET_ADDR_H
+
+#define ADDR_TYPE_NONE         0       /* No address set */
+#define        ADDR_TYPE_ETH           1       /* Ethernet */
+#define        ADDR_TYPE_IP            2       /* Internet Protocol v4 */
+#define        ADDR_TYPE_IP6           3       /* Internet Protocol v6 */
+
+struct addr {
+        uint16_t               addr_type;
+        uint16_t               addr_bits;
+        union {
+                eth_addr_t     __eth;
+                ip_addr_t      __ip;
+                ip6_addr_t     __ip6;
+
+                uint8_t                __data8[16];
+                uint16_t       __data16[8];
+                uint32_t       __data32[4];
+        } __addr_u;
+};
+#define addr_eth       __addr_u.__eth
+#define addr_ip                __addr_u.__ip
+#define addr_ip6       __addr_u.__ip6
+#define addr_data8     __addr_u.__data8
+#define addr_data16    __addr_u.__data16
+#define addr_data32    __addr_u.__data32
+
+#define addr_pack(addr, type, bits, data, len) do {    \
+        (addr)->addr_type = type;                      \
+        (addr)->addr_bits = bits;                      \
+        memmove((addr)->addr_data8, (char *)data, len);        \
+} while (0)
+
+__BEGIN_DECLS
+int     addr_cmp(const struct addr *a, const struct addr *b);
+
+int     addr_bcast(const struct addr *a, struct addr *b);
+int     addr_net(const struct addr *a, struct addr *b);
+
+char   *addr_ntop(const struct addr *src, char *dst, size_t size);
+int     addr_pton(const char *src, struct addr *dst);
+
+char   *addr_ntoa(const struct addr *a);
+#define         addr_aton      addr_pton
+
+int     addr_ntos(const struct addr *a, struct sockaddr *sa);
+int     addr_ston(const struct sockaddr *sa, struct addr *a);
+
+int     addr_btos(uint16_t bits, struct sockaddr *sa);
+int     addr_stob(const struct sockaddr *sa, uint16_t *bits);
+
+int     addr_btom(uint16_t bits, void *mask, size_t size);
+int     addr_mtob(const void *mask, size_t size, uint16_t *bits);
+__END_DECLS
+
+#endif /* DNET_ADDR_H */
diff --git a/ext/dnet/arp.h b/ext/dnet/arp.h
new file mode 100644 (file)
index 0000000..d3c1624
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * arp.h
+ *
+ * Address Resolution Protocol.
+ * RFC 826
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: arp.h,v 1.12 2003/03/16 17:39:17 dugsong Exp $
+ */
+
+#ifndef DNET_ARP_H
+#define DNET_ARP_H
+
+#define ARP_HDR_LEN    8       /* base ARP header length */
+#define ARP_ETHIP_LEN  20      /* base ARP message length */
+
+#ifndef __GNUC__
+# define __attribute__(x)
+# pragma pack(1)
+#endif
+
+/*
+ * ARP header
+ */
+struct arp_hdr {
+        uint16_t       ar_hrd; /* format of hardware address */
+        uint16_t       ar_pro; /* format of protocol address */
+        uint8_t                ar_hln; /* length of hardware address (ETH_ADDR_LEN) */
+        uint8_t                ar_pln; /* length of protocol address (IP_ADDR_LEN) */
+        uint16_t       ar_op;  /* operation */
+};
+
+/*
+ * Hardware address format
+ */
+#define ARP_HRD_ETH    0x0001  /* ethernet hardware */
+#define ARP_HRD_IEEE802        0x0006  /* IEEE 802 hardware */
+
+/*
+ * Protocol address format
+ */
+#define ARP_PRO_IP     0x0800  /* IP protocol */
+
+/*
+ * ARP operation
+ */
+#define        ARP_OP_REQUEST          1       /* request to resolve ha given pa */
+#define        ARP_OP_REPLY            2       /* response giving hardware address */
+#define        ARP_OP_REVREQUEST       3       /* request to resolve pa given ha */
+#define        ARP_OP_REVREPLY         4       /* response giving protocol address */
+
+/*
+ * Ethernet/IP ARP message
+ */
+struct arp_ethip {
+        uint8_t                ar_sha[ETH_ADDR_LEN];   /* sender hardware address */
+        uint8_t                ar_spa[IP_ADDR_LEN];    /* sender protocol address */
+        uint8_t                ar_tha[ETH_ADDR_LEN];   /* target hardware address */
+        uint8_t                ar_tpa[IP_ADDR_LEN];    /* target protocol address */
+};
+
+/*
+ * ARP cache entry
+ */
+struct arp_entry {
+        struct addr    arp_pa;                 /* protocol address */
+        struct addr    arp_ha;                 /* hardware address */
+};
+
+#ifndef __GNUC__
+# pragma pack()
+#endif
+
+#define arp_pack_hdr_ethip(hdr, op, sha, spa, tha, tpa) do {   \
+        struct arp_hdr *pack_arp_p = (struct arp_hdr *)(hdr);  \
+        struct arp_ethip *pack_ethip_p = (struct arp_ethip *)  \
+                ((uint8_t *)(hdr) + ARP_HDR_LEN);              \
+        pack_arp_p->ar_hrd = htons(ARP_HRD_ETH);               \
+        pack_arp_p->ar_pro = htons(ARP_PRO_IP);                        \
+        pack_arp_p->ar_hln = ETH_ADDR_LEN;                     \
+        pack_arp_p->ar_pln = IP_ADDR_LEN;                      \
+        pack_arp_p->ar_op = htons(op);                         \
+        memmove(pack_ethip_p->ar_sha, &(sha), ETH_ADDR_LEN);   \
+        memmove(pack_ethip_p->ar_spa, &(spa), IP_ADDR_LEN);    \
+        memmove(pack_ethip_p->ar_tha, &(tha), ETH_ADDR_LEN);   \
+        memmove(pack_ethip_p->ar_tpa, &(tpa), IP_ADDR_LEN);    \
+} while (0)
+
+typedef struct arp_handle arp_t;
+
+typedef int (*arp_handler)(const struct arp_entry *entry, void *arg);
+
+__BEGIN_DECLS
+arp_t  *arp_open(void);
+int     arp_add(arp_t *arp, const struct arp_entry *entry);
+int     arp_delete(arp_t *arp, const struct arp_entry *entry);
+int     arp_get(arp_t *arp, struct arp_entry *entry);
+int     arp_loop(arp_t *arp, arp_handler callback, void *arg);
+arp_t  *arp_close(arp_t *arp);
+__END_DECLS
+
+#endif /* DNET_ARP_H */
diff --git a/ext/dnet/blob.h b/ext/dnet/blob.h
new file mode 100644 (file)
index 0000000..a3be789
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * blob.h
+ *
+ * Binary blob handling.
+ *
+ * Copyright (c) 2002 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: blob.h,v 1.2 2002/04/05 03:06:44 dugsong Exp $
+ */
+
+#ifndef DNET_BLOB_H
+#define DNET_BLOB_H
+
+typedef struct blob {
+        u_char         *base;          /* start of data */
+        int             off;           /* offset into data */
+        int             end;           /* end of data */
+        int             size;          /* size of allocation */
+} blob_t;
+
+__BEGIN_DECLS
+blob_t *blob_new(void);
+
+int     blob_read(blob_t *b, void *buf, int len);
+int     blob_write(blob_t *b, const void *buf, int len);
+
+int     blob_seek(blob_t *b, int off, int whence);
+#define  blob_skip(b, l)       blob_seek(b, l, SEEK_CUR)
+#define  blob_rewind(b)                blob_seek(b, 0, SEEK_SET)
+
+#define         blob_offset(b)         ((b)->off)
+#define         blob_left(b)           ((b)->end - (b)->off)
+
+int     blob_index(blob_t *b, const void *buf, int len);
+int     blob_rindex(blob_t *b, const void *buf, int len);
+
+int     blob_pack(blob_t *b, const char *fmt, ...);
+int     blob_unpack(blob_t *b, const char *fmt, ...);
+
+int     blob_insert(blob_t *b, const void *buf, int len);
+int     blob_delete(blob_t *b, void *buf, int len);
+
+int     blob_print(blob_t *b, char *style, int len);
+
+blob_t *blob_free(blob_t *b);
+
+int     blob_register_alloc(size_t size, void *(*bmalloc)(size_t),
+            void (*bfree)(void *), void *(*brealloc)(void *, size_t));
+#ifdef va_start
+typedef int (*blob_fmt_cb)(int pack, int len, blob_t *b, va_list *arg);
+
+int     blob_register_pack(char c, blob_fmt_cb fmt_cb);
+#endif
+__END_DECLS
+
+#endif /* DNET_BLOB_H */
diff --git a/ext/dnet/dnet/addr.h b/ext/dnet/dnet/addr.h
deleted file mode 100644 (file)
index 584e3ab..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * addr.h
- *
- * Network address operations.
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: addr.h,v 1.12 2003/02/27 03:44:55 dugsong Exp $
- */
-
-#ifndef DNET_ADDR_H
-#define DNET_ADDR_H
-
-#define ADDR_TYPE_NONE         0       /* No address set */
-#define        ADDR_TYPE_ETH           1       /* Ethernet */
-#define        ADDR_TYPE_IP            2       /* Internet Protocol v4 */
-#define        ADDR_TYPE_IP6           3       /* Internet Protocol v6 */
-
-struct addr {
-        uint16_t               addr_type;
-        uint16_t               addr_bits;
-        union {
-                eth_addr_t     __eth;
-                ip_addr_t      __ip;
-                ip6_addr_t     __ip6;
-
-                uint8_t                __data8[16];
-                uint16_t       __data16[8];
-                uint32_t       __data32[4];
-        } __addr_u;
-};
-#define addr_eth       __addr_u.__eth
-#define addr_ip                __addr_u.__ip
-#define addr_ip6       __addr_u.__ip6
-#define addr_data8     __addr_u.__data8
-#define addr_data16    __addr_u.__data16
-#define addr_data32    __addr_u.__data32
-
-#define addr_pack(addr, type, bits, data, len) do {    \
-        (addr)->addr_type = type;                      \
-        (addr)->addr_bits = bits;                      \
-        memmove((addr)->addr_data8, (char *)data, len);        \
-} while (0)
-
-__BEGIN_DECLS
-int     addr_cmp(const struct addr *a, const struct addr *b);
-
-int     addr_bcast(const struct addr *a, struct addr *b);
-int     addr_net(const struct addr *a, struct addr *b);
-
-char   *addr_ntop(const struct addr *src, char *dst, size_t size);
-int     addr_pton(const char *src, struct addr *dst);
-
-char   *addr_ntoa(const struct addr *a);
-#define         addr_aton      addr_pton
-
-int     addr_ntos(const struct addr *a, struct sockaddr *sa);
-int     addr_ston(const struct sockaddr *sa, struct addr *a);
-
-int     addr_btos(uint16_t bits, struct sockaddr *sa);
-int     addr_stob(const struct sockaddr *sa, uint16_t *bits);
-
-int     addr_btom(uint16_t bits, void *mask, size_t size);
-int     addr_mtob(const void *mask, size_t size, uint16_t *bits);
-__END_DECLS
-
-#endif /* DNET_ADDR_H */
diff --git a/ext/dnet/dnet/arp.h b/ext/dnet/dnet/arp.h
deleted file mode 100644 (file)
index d3c1624..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * arp.h
- *
- * Address Resolution Protocol.
- * RFC 826
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: arp.h,v 1.12 2003/03/16 17:39:17 dugsong Exp $
- */
-
-#ifndef DNET_ARP_H
-#define DNET_ARP_H
-
-#define ARP_HDR_LEN    8       /* base ARP header length */
-#define ARP_ETHIP_LEN  20      /* base ARP message length */
-
-#ifndef __GNUC__
-# define __attribute__(x)
-# pragma pack(1)
-#endif
-
-/*
- * ARP header
- */
-struct arp_hdr {
-        uint16_t       ar_hrd; /* format of hardware address */
-        uint16_t       ar_pro; /* format of protocol address */
-        uint8_t                ar_hln; /* length of hardware address (ETH_ADDR_LEN) */
-        uint8_t                ar_pln; /* length of protocol address (IP_ADDR_LEN) */
-        uint16_t       ar_op;  /* operation */
-};
-
-/*
- * Hardware address format
- */
-#define ARP_HRD_ETH    0x0001  /* ethernet hardware */
-#define ARP_HRD_IEEE802        0x0006  /* IEEE 802 hardware */
-
-/*
- * Protocol address format
- */
-#define ARP_PRO_IP     0x0800  /* IP protocol */
-
-/*
- * ARP operation
- */
-#define        ARP_OP_REQUEST          1       /* request to resolve ha given pa */
-#define        ARP_OP_REPLY            2       /* response giving hardware address */
-#define        ARP_OP_REVREQUEST       3       /* request to resolve pa given ha */
-#define        ARP_OP_REVREPLY         4       /* response giving protocol address */
-
-/*
- * Ethernet/IP ARP message
- */
-struct arp_ethip {
-        uint8_t                ar_sha[ETH_ADDR_LEN];   /* sender hardware address */
-        uint8_t                ar_spa[IP_ADDR_LEN];    /* sender protocol address */
-        uint8_t                ar_tha[ETH_ADDR_LEN];   /* target hardware address */
-        uint8_t                ar_tpa[IP_ADDR_LEN];    /* target protocol address */
-};
-
-/*
- * ARP cache entry
- */
-struct arp_entry {
-        struct addr    arp_pa;                 /* protocol address */
-        struct addr    arp_ha;                 /* hardware address */
-};
-
-#ifndef __GNUC__
-# pragma pack()
-#endif
-
-#define arp_pack_hdr_ethip(hdr, op, sha, spa, tha, tpa) do {   \
-        struct arp_hdr *pack_arp_p = (struct arp_hdr *)(hdr);  \
-        struct arp_ethip *pack_ethip_p = (struct arp_ethip *)  \
-                ((uint8_t *)(hdr) + ARP_HDR_LEN);              \
-        pack_arp_p->ar_hrd = htons(ARP_HRD_ETH);               \
-        pack_arp_p->ar_pro = htons(ARP_PRO_IP);                        \
-        pack_arp_p->ar_hln = ETH_ADDR_LEN;                     \
-        pack_arp_p->ar_pln = IP_ADDR_LEN;                      \
-        pack_arp_p->ar_op = htons(op);                         \
-        memmove(pack_ethip_p->ar_sha, &(sha), ETH_ADDR_LEN);   \
-        memmove(pack_ethip_p->ar_spa, &(spa), IP_ADDR_LEN);    \
-        memmove(pack_ethip_p->ar_tha, &(tha), ETH_ADDR_LEN);   \
-        memmove(pack_ethip_p->ar_tpa, &(tpa), IP_ADDR_LEN);    \
-} while (0)
-
-typedef struct arp_handle arp_t;
-
-typedef int (*arp_handler)(const struct arp_entry *entry, void *arg);
-
-__BEGIN_DECLS
-arp_t  *arp_open(void);
-int     arp_add(arp_t *arp, const struct arp_entry *entry);
-int     arp_delete(arp_t *arp, const struct arp_entry *entry);
-int     arp_get(arp_t *arp, struct arp_entry *entry);
-int     arp_loop(arp_t *arp, arp_handler callback, void *arg);
-arp_t  *arp_close(arp_t *arp);
-__END_DECLS
-
-#endif /* DNET_ARP_H */
diff --git a/ext/dnet/dnet/blob.h b/ext/dnet/dnet/blob.h
deleted file mode 100644 (file)
index a3be789..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * blob.h
- *
- * Binary blob handling.
- *
- * Copyright (c) 2002 Dug Song <dugsong@monkey.org>
- *
- * $Id: blob.h,v 1.2 2002/04/05 03:06:44 dugsong Exp $
- */
-
-#ifndef DNET_BLOB_H
-#define DNET_BLOB_H
-
-typedef struct blob {
-        u_char         *base;          /* start of data */
-        int             off;           /* offset into data */
-        int             end;           /* end of data */
-        int             size;          /* size of allocation */
-} blob_t;
-
-__BEGIN_DECLS
-blob_t *blob_new(void);
-
-int     blob_read(blob_t *b, void *buf, int len);
-int     blob_write(blob_t *b, const void *buf, int len);
-
-int     blob_seek(blob_t *b, int off, int whence);
-#define  blob_skip(b, l)       blob_seek(b, l, SEEK_CUR)
-#define  blob_rewind(b)                blob_seek(b, 0, SEEK_SET)
-
-#define         blob_offset(b)         ((b)->off)
-#define         blob_left(b)           ((b)->end - (b)->off)
-
-int     blob_index(blob_t *b, const void *buf, int len);
-int     blob_rindex(blob_t *b, const void *buf, int len);
-
-int     blob_pack(blob_t *b, const char *fmt, ...);
-int     blob_unpack(blob_t *b, const char *fmt, ...);
-
-int     blob_insert(blob_t *b, const void *buf, int len);
-int     blob_delete(blob_t *b, void *buf, int len);
-
-int     blob_print(blob_t *b, char *style, int len);
-
-blob_t *blob_free(blob_t *b);
-
-int     blob_register_alloc(size_t size, void *(*bmalloc)(size_t),
-            void (*bfree)(void *), void *(*brealloc)(void *, size_t));
-#ifdef va_start
-typedef int (*blob_fmt_cb)(int pack, int len, blob_t *b, va_list *arg);
-
-int     blob_register_pack(char c, blob_fmt_cb fmt_cb);
-#endif
-__END_DECLS
-
-#endif /* DNET_BLOB_H */
diff --git a/ext/dnet/dnet/eth.h b/ext/dnet/dnet/eth.h
deleted file mode 100644 (file)
index da30330..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * eth.h
- *
- * Ethernet.
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: eth.h,v 1.15 2004/01/03 08:47:23 dugsong Exp $
- */
-
-#ifndef DNET_ETH_H
-#define DNET_ETH_H
-
-#define ETH_ADDR_LEN   6
-#define ETH_ADDR_BITS  48
-#define ETH_TYPE_LEN   2
-#define ETH_CRC_LEN    4
-#define ETH_HDR_LEN    14
-
-#define ETH_LEN_MIN    64              /* minimum frame length with CRC */
-#define ETH_LEN_MAX    1518            /* maximum frame length with CRC */
-
-#define ETH_MTU                (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN)
-#define ETH_MIN                (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN)
-
-typedef struct eth_addr {
-        uint8_t                data[ETH_ADDR_LEN];
-} eth_addr_t;
-
-struct eth_hdr {
-        eth_addr_t     eth_dst;        /* destination address */
-        eth_addr_t     eth_src;        /* source address */
-        uint16_t       eth_type;       /* payload type */
-};
-
-/*
- * Ethernet payload types - http://standards.ieee.org/regauth/ethertype
- */
-#define ETH_TYPE_PUP   0x0200          /* PUP protocol */
-#define ETH_TYPE_IP    0x0800          /* IP protocol */
-#define ETH_TYPE_ARP   0x0806          /* address resolution protocol */
-#define ETH_TYPE_REVARP        0x8035          /* reverse addr resolution protocol */
-#define ETH_TYPE_8021Q 0x8100          /* IEEE 802.1Q VLAN tagging */
-#define ETH_TYPE_IPV6  0x86DD          /* IPv6 protocol */
-#define ETH_TYPE_MPLS  0x8847          /* MPLS */
-#define ETH_TYPE_MPLS_MCAST    0x8848  /* MPLS Multicast */
-#define ETH_TYPE_PPPOEDISC     0x8863  /* PPP Over Ethernet Discovery Stage */
-#define ETH_TYPE_PPPOE 0x8864          /* PPP Over Ethernet Session Stage */
-#define ETH_TYPE_LOOPBACK      0x9000  /* used to test interfaces */
-
-#define ETH_IS_MULTICAST(ea)   (*(ea) & 0x01) /* is address mcast/bcast? */
-
-#define ETH_ADDR_BROADCAST     "\xff\xff\xff\xff\xff\xff"
-
-#define eth_pack_hdr(h, dst, src, type) do {                   \
-        struct eth_hdr *eth_pack_p = (struct eth_hdr *)(h);    \
-        memmove(&eth_pack_p->eth_dst, &(dst), ETH_ADDR_LEN);   \
-        memmove(&eth_pack_p->eth_src, &(src), ETH_ADDR_LEN);   \
-        eth_pack_p->eth_type = htons(type);                    \
-} while (0)
-
-typedef struct eth_handle eth_t;
-
-__BEGIN_DECLS
-eth_t  *eth_open(const char *device);
-int     eth_get(eth_t *e, eth_addr_t *ea);
-int     eth_set(eth_t *e, const eth_addr_t *ea);
-size_t  eth_send(eth_t *e, const void *buf, size_t len);
-eth_t  *eth_close(eth_t *e);
-
-char   *eth_ntop(const eth_addr_t *eth, char *dst, size_t len);
-int     eth_pton(const char *src, eth_addr_t *dst);
-char   *eth_ntoa(const eth_addr_t *eth);
-#define         eth_aton eth_pton
-__END_DECLS
-
-#endif /* DNET_ETH_H */
diff --git a/ext/dnet/dnet/fw.h b/ext/dnet/dnet/fw.h
deleted file mode 100644 (file)
index ebda8e7..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * fw.h
- *
- * Network firewalling operations.
- *
- * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
- *
- * $Id: fw.h,v 1.13 2002/12/14 04:02:36 dugsong Exp $
- */
-
-#ifndef DNET_FW_H
-#define DNET_FW_H
-
-struct fw_rule {
-        char           fw_device[INTF_NAME_LEN]; /* interface name */
-        uint8_t                fw_op;                    /* operation */
-        uint8_t                fw_dir;                   /* direction */
-        uint8_t                fw_proto;                 /* IP protocol */
-        struct addr    fw_src;                   /* src address / net */
-        struct addr    fw_dst;                   /* dst address / net */
-        uint16_t       fw_sport[2];              /* range / ICMP type */
-        uint16_t       fw_dport[2];              /* range / ICMP code */
-};
-
-#define FW_OP_ALLOW    1
-#define FW_OP_BLOCK    2
-
-#define FW_DIR_IN      1
-#define FW_DIR_OUT     2
-
-#define fw_pack_rule(rule, dev, op, dir, p, s, d, sp1, sp2, dp1, dp2)  \
-do {                                                                   \
-        strlcpy((rule)->fw_device, dev, sizeof((rule)->fw_device));    \
-        (rule)->fw_op = op; (rule)->fw_dir = dir;                      \
-        (rule)->fw_proto = p;                                          \
-        memmove(&(rule)->fw_src, &(s), sizeof((rule)->fw_src));                \
-        memmove(&(rule)->fw_dst, &(d), sizeof((rule)->fw_dst));                \
-        (rule)->fw_sport[0] = sp1; (rule)->fw_sport[1] = sp2;          \
-        (rule)->fw_dport[0] = dp1; (rule)->fw_dport[1] = dp2;          \
-} while (0)
-
-typedef struct fw_handle fw_t;
-
-typedef int (*fw_handler)(const struct fw_rule *rule, void *arg);
-
-__BEGIN_DECLS
-fw_t   *fw_open(void);
-int     fw_add(fw_t *f, const struct fw_rule *rule);
-int     fw_delete(fw_t *f, const struct fw_rule *rule);
-int     fw_loop(fw_t *f, fw_handler callback, void *arg);
-fw_t   *fw_close(fw_t *f);
-__END_DECLS
-
-#endif /* DNET_FW_H */
diff --git a/ext/dnet/dnet/icmp.h b/ext/dnet/dnet/icmp.h
deleted file mode 100644 (file)
index e997d58..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * icmp.h
- *
- * Internet Control Message Protocol.
- * RFC 792, 950, 1256, 1393, 1475, 2002, 2521
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: icmp.h,v 1.14 2003/03/16 17:39:17 dugsong Exp $
- */
-
-#ifndef DNET_ICMP_H
-#define DNET_ICMP_H
-
-#define ICMP_HDR_LEN   4       /* base ICMP header length */
-#define ICMP_LEN_MIN   8       /* minimum ICMP message size, with header */
-
-#ifndef __GNUC__
-# define __attribute__(x)
-# pragma pack(1)
-#endif
-
-/*
- * ICMP header
- */
-struct icmp_hdr {
-        uint8_t                icmp_type;      /* type of message, see below */
-        uint8_t                icmp_code;      /* type sub code */
-        uint16_t       icmp_cksum;     /* ones complement cksum of struct */
-};
-
-/*
- * Types (icmp_type) and codes (icmp_code) -
- * http://www.iana.org/assignments/icmp-parameters
- */
-#define                ICMP_CODE_NONE          0       /* for types without codes */
-#define        ICMP_ECHOREPLY          0               /* echo reply */
-#define        ICMP_UNREACH            3               /* dest unreachable, codes: */
-#define                ICMP_UNREACH_NET                0       /* bad net */
-#define                ICMP_UNREACH_HOST               1       /* bad host */
-#define                ICMP_UNREACH_PROTO              2       /* bad protocol */
-#define                ICMP_UNREACH_PORT               3       /* bad port */
-#define                ICMP_UNREACH_NEEDFRAG           4       /* IP_DF caused drop */
-#define                ICMP_UNREACH_SRCFAIL            5       /* src route failed */
-#define                ICMP_UNREACH_NET_UNKNOWN        6       /* unknown net */
-#define                ICMP_UNREACH_HOST_UNKNOWN       7       /* unknown host */
-#define                ICMP_UNREACH_ISOLATED           8       /* src host isolated */
-#define                ICMP_UNREACH_NET_PROHIB         9       /* for crypto devs */
-#define                ICMP_UNREACH_HOST_PROHIB        10      /* ditto */
-#define                ICMP_UNREACH_TOSNET             11      /* bad tos for net */
-#define                ICMP_UNREACH_TOSHOST            12      /* bad tos for host */
-#define                ICMP_UNREACH_FILTER_PROHIB      13      /* prohibited access */
-#define                ICMP_UNREACH_HOST_PRECEDENCE    14      /* precedence error */
-#define                ICMP_UNREACH_PRECEDENCE_CUTOFF  15      /* precedence cutoff */
-#define        ICMP_SRCQUENCH          4               /* packet lost, slow down */
-#define        ICMP_REDIRECT           5               /* shorter route, codes: */
-#define                ICMP_REDIRECT_NET               0       /* for network */
-#define                ICMP_REDIRECT_HOST              1       /* for host */
-#define                ICMP_REDIRECT_TOSNET            2       /* for tos and net */
-#define                ICMP_REDIRECT_TOSHOST           3       /* for tos and host */
-#define        ICMP_ALTHOSTADDR        6               /* alternate host address */
-#define        ICMP_ECHO               8               /* echo service */
-#define        ICMP_RTRADVERT          9               /* router advertise, codes: */
-#define                ICMP_RTRADVERT_NORMAL           0       /* normal */
-#define                ICMP_RTRADVERT_NOROUTE_COMMON 16        /* selective routing */
-#define        ICMP_RTRSOLICIT         10              /* router solicitation */
-#define        ICMP_TIMEXCEED          11              /* time exceeded, code: */
-#define                ICMP_TIMEXCEED_INTRANS          0       /* ttl==0 in transit */
-#define                ICMP_TIMEXCEED_REASS            1       /* ttl==0 in reass */
-#define        ICMP_PARAMPROB          12              /* ip header bad */
-#define                ICMP_PARAMPROB_ERRATPTR         0       /* req. opt. absent */
-#define                ICMP_PARAMPROB_OPTABSENT        1       /* req. opt. absent */
-#define                ICMP_PARAMPROB_LENGTH           2       /* bad length */
-#define        ICMP_TSTAMP             13              /* timestamp request */
-#define        ICMP_TSTAMPREPLY        14              /* timestamp reply */
-#define        ICMP_INFO               15              /* information request */
-#define        ICMP_INFOREPLY          16              /* information reply */
-#define        ICMP_MASK               17              /* address mask request */
-#define        ICMP_MASKREPLY          18              /* address mask reply */
-#define ICMP_TRACEROUTE                30              /* traceroute */
-#define ICMP_DATACONVERR       31              /* data conversion error */
-#define ICMP_MOBILE_REDIRECT   32              /* mobile host redirect */
-#define ICMP_IPV6_WHEREAREYOU  33              /* IPv6 where-are-you */
-#define ICMP_IPV6_IAMHERE      34              /* IPv6 i-am-here */
-#define ICMP_MOBILE_REG                35              /* mobile registration req */
-#define ICMP_MOBILE_REGREPLY   36              /* mobile registration reply */
-#define ICMP_DNS               37              /* domain name request */
-#define ICMP_DNSREPLY          38              /* domain name reply */
-#define ICMP_SKIP              39              /* SKIP */
-#define ICMP_PHOTURIS          40              /* Photuris */
-#define                ICMP_PHOTURIS_UNKNOWN_INDEX     0       /* unknown sec index */
-#define                ICMP_PHOTURIS_AUTH_FAILED       1       /* auth failed */
-#define                ICMP_PHOTURIS_DECOMPRESS_FAILED 2       /* decompress failed */
-#define                ICMP_PHOTURIS_DECRYPT_FAILED    3       /* decrypt failed */
-#define                ICMP_PHOTURIS_NEED_AUTHN        4       /* no authentication */
-#define                ICMP_PHOTURIS_NEED_AUTHZ        5       /* no authorization */
-#define        ICMP_TYPE_MAX           40
-
-#define        ICMP_INFOTYPE(type)                                             \
-        ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO ||            \
-        (type) == ICMP_RTRADVERT || (type) == ICMP_RTRSOLICIT ||       \
-        (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY ||         \
-        (type) == ICMP_INFO || (type) == ICMP_INFOREPLY ||             \
-        (type) == ICMP_MASK || (type) == ICMP_MASKREPLY)
-
-/*
- * Echo message data
- */
-struct icmp_msg_echo {
-        uint16_t       icmp_id;
-        uint16_t       icmp_seq;
-        uint8_t                icmp_data __flexarr;    /* optional data */
-};
-
-/*
- * Fragmentation-needed (unreachable) message data
- */
-struct icmp_msg_needfrag {
-        uint16_t       icmp_void;              /* must be zero */
-        uint16_t       icmp_mtu;               /* MTU of next-hop network */
-        uint8_t                icmp_ip __flexarr;      /* IP hdr + 8 bytes of pkt */
-};
-
-/*
- *  Unreachable, source quench, redirect, time exceeded,
- *  parameter problem message data
- */
-struct icmp_msg_quote {
-        uint32_t       icmp_void;              /* must be zero */
-#define icmp_gwaddr    icmp_void               /* router IP address to use */
-#define icmp_pptr      icmp_void               /* ptr to bad octet field */
-        uint8_t                icmp_ip __flexarr;      /* IP hdr + 8 bytes of pkt */
-};
-
-/*
- * Router advertisement message data, RFC 1256
- */
-struct icmp_msg_rtradvert {
-        uint8_t                icmp_num_addrs;         /* # of address / pref pairs */
-        uint8_t                icmp_wpa;               /* words / address == 2 */
-        uint16_t       icmp_lifetime;          /* route lifetime in seconds */
-        struct icmp_msg_rtr_data {
-                uint32_t       icmp_void;
-#define icmp_gwaddr            icmp_void       /* router IP address */
-                uint32_t       icmp_pref;      /* router preference (usu 0) */
-        } icmp_rtr __flexarr;                  /* variable # of routers */
-};
-#define ICMP_RTR_PREF_NODEFAULT        0x80000000      /* do not use as default gw */
-
-/*
- * Timestamp message data
- */
-struct icmp_msg_tstamp {
-        uint32_t       icmp_id;                /* identifier */
-        uint32_t       icmp_seq;               /* sequence number */
-        uint32_t       icmp_ts_orig;           /* originate timestamp */
-        uint32_t       icmp_ts_rx;             /* receive timestamp */
-        uint32_t       icmp_ts_tx;             /* transmit timestamp */
-};
-
-/*
- * Address mask message data, RFC 950
- */
-struct icmp_msg_mask {
-        uint32_t       icmp_id;                /* identifier */
-        uint32_t       icmp_seq;               /* sequence number */
-        uint32_t       icmp_mask;              /* address mask */
-};
-
-/*
- * Traceroute message data, RFC 1393, RFC 1812
- */
-struct icmp_msg_traceroute {
-        uint16_t       icmp_id;                /* identifier */
-        uint16_t       icmp_void;              /* unused */
-        uint16_t       icmp_ohc;               /* outbound hop count */
-        uint16_t       icmp_rhc;               /* return hop count */
-        uint32_t       icmp_speed;             /* link speed, bytes/sec */
-        uint32_t       icmp_mtu;               /* MTU in bytes */
-};
-
-/*
- * Domain name reply message data, RFC 1788
- */
-struct icmp_msg_dnsreply {
-        uint16_t       icmp_id;                /* identifier */
-        uint16_t       icmp_seq;               /* sequence number */
-        uint32_t       icmp_ttl;               /* time-to-live */
-        uint8_t                icmp_names __flexarr;   /* variable number of names */
-};
-
-/*
- * Generic identifier, sequence number data
- */
-struct icmp_msg_idseq {
-        uint16_t       icmp_id;
-        uint16_t       icmp_seq;
-};
-
-/*
- * ICMP message union
- */
-union icmp_msg {
-        struct icmp_msg_echo      echo;        /* ICMP_ECHO{REPLY} */
-        struct icmp_msg_quote     unreach;     /* ICMP_UNREACH */
-        struct icmp_msg_needfrag   needfrag;   /* ICMP_UNREACH_NEEDFRAG */
-        struct icmp_msg_quote     srcquench;   /* ICMP_SRCQUENCH */
-        struct icmp_msg_quote     redirect;    /* ICMP_REDIRECT (set to 0) */
-        uint32_t                  rtrsolicit;  /* ICMP_RTRSOLICIT */
-        struct icmp_msg_rtradvert  rtradvert;  /* ICMP_RTRADVERT */
-        struct icmp_msg_quote     timexceed;   /* ICMP_TIMEXCEED */
-        struct icmp_msg_quote     paramprob;   /* ICMP_PARAMPROB */
-        struct icmp_msg_tstamp    tstamp;      /* ICMP_TSTAMP{REPLY} */
-        struct icmp_msg_idseq     info;        /* ICMP_INFO{REPLY} */
-        struct icmp_msg_mask      mask;        /* ICMP_MASK{REPLY} */
-        struct icmp_msg_traceroute traceroute; /* ICMP_TRACEROUTE */
-        struct icmp_msg_idseq     dns;         /* ICMP_DNS */
-        struct icmp_msg_dnsreply   dnsreply;   /* ICMP_DNSREPLY */
-};
-
-#ifndef __GNUC__
-# pragma pack()
-#endif
-
-#define icmp_pack_hdr(hdr, type, code) do {                            \
-        struct icmp_hdr *icmp_pack_p = (struct icmp_hdr *)(hdr);       \
-        icmp_pack_p->icmp_type = type; icmp_pack_p->icmp_code = code;  \
-} while (0)
-
-#define icmp_pack_hdr_echo(hdr, type, code, id, seq, data, len) do {   \
-        struct icmp_msg_echo *echo_pack_p = (struct icmp_msg_echo *)   \
-                ((uint8_t *)(hdr) + ICMP_HDR_LEN);                     \
-        icmp_pack_hdr(hdr, type, code);                                        \
-        echo_pack_p->icmp_id = htons(id);                              \
-        echo_pack_p->icmp_seq = htons(seq);                            \
-        memmove(echo_pack_p->icmp_data, data, len);                    \
-} while (0)
-
-#define icmp_pack_hdr_quote(hdr, type, code, word, pkt, len) do {      \
-        struct icmp_msg_quote *quote_pack_p = (struct icmp_msg_quote *)        \
-                ((uint8_t *)(hdr) + ICMP_HDR_LEN);                     \
-        icmp_pack_hdr(hdr, type, code);                                        \
-        quote_pack_p->icmp_void = htonl(word);                         \
-        memmove(quote_pack_p->icmp_ip, pkt, len);                      \
-} while (0)
-
-#define icmp_pack_hdr_mask(hdr, type, code, id, seq, mask) do {                \
-        struct icmp_msg_mask *mask_pack_p = (struct icmp_msg_mask *)   \
-                ((uint8_t *)(hdr) + ICMP_HDR_LEN);                     \
-        icmp_pack_hdr(hdr, type, code);                                        \
-        mask_pack_p->icmp_id = htons(id);                              \
-        mask_pack_p->icmp_seq = htons(seq);                            \
-        mask_pack_p->icmp_mask = htonl(mask);                          \
-} while (0)
-
-#define icmp_pack_hdr_needfrag(hdr, type, code, mtu, pkt, len) do {    \
-        struct icmp_msg_needfrag *frag_pack_p =                                \
-        (struct icmp_msg_needfrag *)((uint8_t *)(hdr) + ICMP_HDR_LEN); \
-        icmp_pack_hdr(hdr, type, code);                                        \
-        frag_pack_p->icmp_void = 0;                                    \
-        frag_pack_p->icmp_mtu = htons(mtu);                            \
-        memmove(frag_pack_p->icmp_ip, pkt, len);                       \
-} while (0)
-
-#endif /* DNET_ICMP_H */
diff --git a/ext/dnet/dnet/intf.h b/ext/dnet/dnet/intf.h
deleted file mode 100644 (file)
index 38acd43..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * intf.c
- *
- * Network interface operations.
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: intf.h,v 1.16 2004/01/13 07:41:09 dugsong Exp $
- */
-
-#ifndef DNET_INTF_H
-#define DNET_INTF_H
-
-/*
- * Interface entry
- */
-#define INTF_NAME_LEN  16
-
-struct intf_entry {
-        u_int          intf_len;                   /* length of entry */
-        char           intf_name[INTF_NAME_LEN];   /* interface name */
-        u_short                intf_type;                  /* interface type (r/o) */
-        u_short                intf_flags;                 /* interface flags */
-        u_int          intf_mtu;                   /* interface MTU */
-        struct addr    intf_addr;                  /* interface address */
-        struct addr    intf_dst_addr;              /* point-to-point dst */
-        struct addr    intf_link_addr;             /* link-layer address */
-        u_int          intf_alias_num;             /* number of aliases */
-        struct addr    intf_alias_addrs __flexarr; /* array of aliases */
-};
-
-/*
- * MIB-II interface types - http://www.iana.org/assignments/ianaiftype-mib
- */
-#define INTF_TYPE_OTHER                1       /* other */
-#define INTF_TYPE_ETH          6       /* Ethernet */
-#define INTF_TYPE_TOKENRING    9       /* Token Ring */
-#define INTF_TYPE_FDDI         15      /* FDDI */
-#define INTF_TYPE_PPP          23      /* Point-to-Point Protocol */
-#define INTF_TYPE_LOOPBACK     24      /* software loopback */
-#define INTF_TYPE_SLIP         28      /* Serial Line Interface Protocol */
-#define INTF_TYPE_TUN          53      /* proprietary virtual/internal */
-
-/*
- * Interface flags
- */
-#define INTF_FLAG_UP           0x01    /* enable interface */
-#define INTF_FLAG_LOOPBACK     0x02    /* is a loopback net (r/o) */
-#define INTF_FLAG_POINTOPOINT  0x04    /* point-to-point link (r/o) */
-#define INTF_FLAG_NOARP                0x08    /* disable ARP */
-#define INTF_FLAG_BROADCAST    0x10    /* supports broadcast (r/o) */
-#define INTF_FLAG_MULTICAST    0x20    /* supports multicast (r/o) */
-
-typedef struct intf_handle intf_t;
-
-typedef int (*intf_handler)(const struct intf_entry *entry, void *arg);
-
-__BEGIN_DECLS
-intf_t *intf_open(void);
-int     intf_get(intf_t *i, struct intf_entry *entry);
-int     intf_get_src(intf_t *i, struct intf_entry *entry, struct addr *src);
-int     intf_get_dst(intf_t *i, struct intf_entry *entry, struct addr *dst);
-int     intf_set(intf_t *i, const struct intf_entry *entry);
-int     intf_loop(intf_t *i, intf_handler callback, void *arg);
-intf_t *intf_close(intf_t *i);
-__END_DECLS
-
-#endif /* DNET_INTF_H */
diff --git a/ext/dnet/dnet/ip.h b/ext/dnet/dnet/ip.h
deleted file mode 100644 (file)
index 95b7718..0000000
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * ip.h
- *
- * Internet Protocol (RFC 791).
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: ip.h,v 1.23 2003/03/16 17:39:17 dugsong Exp $
- */
-
-#ifndef DNET_IP_H
-#define DNET_IP_H
-
-#define IP_ADDR_LEN    4               /* IP address length */
-#define IP_ADDR_BITS   32              /* IP address bits */
-
-#define IP_HDR_LEN     20              /* base IP header length */
-#define IP_OPT_LEN     2               /* base IP option length */
-#define IP_OPT_LEN_MAX 40
-#define IP_HDR_LEN_MAX (IP_HDR_LEN + IP_OPT_LEN_MAX)
-
-#define IP_LEN_MAX     65535
-#define IP_LEN_MIN     IP_HDR_LEN
-
-typedef uint32_t       ip_addr_t;
-
-#ifndef __GNUC__
-# define __attribute__(x)
-# pragma pack(1)
-#endif
-
-/*
- * IP header, without options
- */
-struct ip_hdr {
-#if DNET_BYTESEX == DNET_BIG_ENDIAN
-        uint8_t                ip_v:4,         /* version */
-                        ip_hl:4;       /* header length (incl any options) */
-#elif DNET_BYTESEX == DNET_LIL_ENDIAN
-        uint8_t                ip_hl:4,
-                        ip_v:4;
-#else
-# error "need to include <dnet.h>"
-#endif
-        uint8_t                ip_tos;         /* type of service */
-        uint16_t       ip_len;         /* total length (incl header) */
-        uint16_t       ip_id;          /* identification */
-        uint16_t       ip_off;         /* fragment offset and flags */
-        uint8_t                ip_ttl;         /* time to live */
-        uint8_t                ip_p;           /* protocol */
-        uint16_t       ip_sum;         /* checksum */
-        ip_addr_t      ip_src;         /* source address */
-        ip_addr_t      ip_dst;         /* destination address */
-};
-
-/*
- * Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474")
- */
-#define IP_TOS_DEFAULT         0x00    /* default */
-#define IP_TOS_LOWDELAY                0x10    /* low delay */
-#define IP_TOS_THROUGHPUT      0x08    /* high throughput */
-#define IP_TOS_RELIABILITY     0x04    /* high reliability */
-#define IP_TOS_LOWCOST         0x02    /* low monetary cost - XXX */
-#define IP_TOS_ECT             0x02    /* ECN-capable transport */
-#define IP_TOS_CE              0x01    /* congestion experienced */
-
-/*
- * IP precedence (high 3 bits of ip_tos), hopefully unused
- */
-#define IP_TOS_PREC_ROUTINE            0x00
-#define IP_TOS_PREC_PRIORITY           0x20
-#define IP_TOS_PREC_IMMEDIATE          0x40
-#define IP_TOS_PREC_FLASH              0x60
-#define IP_TOS_PREC_FLASHOVERRIDE      0x80
-#define IP_TOS_PREC_CRITIC_ECP         0xa0
-#define IP_TOS_PREC_INTERNETCONTROL    0xc0
-#define IP_TOS_PREC_NETCONTROL         0xe0
-
-/*
- * Fragmentation flags (ip_off)
- */
-#define IP_RF          0x8000          /* reserved */
-#define IP_DF          0x4000          /* don't fragment */
-#define IP_MF          0x2000          /* more fragments (not last frag) */
-#define IP_OFFMASK     0x1fff          /* mask for fragment offset */
-
-/*
- * Time-to-live (ip_ttl), seconds
- */
-#define IP_TTL_DEFAULT 64              /* default ttl, RFC 1122, RFC 1340 */
-#define IP_TTL_MAX     255             /* maximum ttl */
-
-/*
- * Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers
- */
-#define        IP_PROTO_IP             0               /* dummy for IP */
-#define IP_PROTO_HOPOPTS       IP_PROTO_IP     /* IPv6 hop-by-hop options */
-#define        IP_PROTO_ICMP           1               /* ICMP */
-#define        IP_PROTO_IGMP           2               /* IGMP */
-#define IP_PROTO_GGP           3               /* gateway-gateway protocol */
-#define        IP_PROTO_IPIP           4               /* IP in IP */
-#define IP_PROTO_ST            5               /* ST datagram mode */
-#define        IP_PROTO_TCP            6               /* TCP */
-#define IP_PROTO_CBT           7               /* CBT */
-#define        IP_PROTO_EGP            8               /* exterior gateway protocol */
-#define IP_PROTO_IGP           9               /* interior gateway protocol */
-#define IP_PROTO_BBNRCC                10              /* BBN RCC monitoring */
-#define IP_PROTO_NVP           11              /* Network Voice Protocol */
-#define        IP_PROTO_PUP            12              /* PARC universal packet */
-#define IP_PROTO_ARGUS         13              /* ARGUS */
-#define IP_PROTO_EMCON         14              /* EMCON */
-#define IP_PROTO_XNET          15              /* Cross Net Debugger */
-#define IP_PROTO_CHAOS         16              /* Chaos */
-#define        IP_PROTO_UDP            17              /* UDP */
-#define IP_PROTO_MUX           18              /* multiplexing */
-#define IP_PROTO_DCNMEAS       19              /* DCN measurement */
-#define IP_PROTO_HMP           20              /* Host Monitoring Protocol */
-#define IP_PROTO_PRM           21              /* Packet Radio Measurement */
-#define        IP_PROTO_IDP            22              /* Xerox NS IDP */
-#define IP_PROTO_TRUNK1                23              /* Trunk-1 */
-#define IP_PROTO_TRUNK2                24              /* Trunk-2 */
-#define IP_PROTO_LEAF1         25              /* Leaf-1 */
-#define IP_PROTO_LEAF2         26              /* Leaf-2 */
-#define IP_PROTO_RDP           27              /* "Reliable Datagram" proto */
-#define IP_PROTO_IRTP          28              /* Inet Reliable Transaction */
-#define        IP_PROTO_TP             29              /* ISO TP class 4 */
-#define IP_PROTO_NETBLT                30              /* Bulk Data Transfer */
-#define IP_PROTO_MFPNSP                31              /* MFE Network Services */
-#define IP_PROTO_MERITINP      32              /* Merit Internodal Protocol */
-#define IP_PROTO_SEP           33              /* Sequential Exchange proto */
-#define IP_PROTO_3PC           34              /* Third Party Connect proto */
-#define IP_PROTO_IDPR          35              /* Interdomain Policy Route */
-#define IP_PROTO_XTP           36              /* Xpress Transfer Protocol */
-#define IP_PROTO_DDP           37              /* Datagram Delivery Proto */
-#define IP_PROTO_CMTP          38              /* IDPR Ctrl Message Trans */
-#define IP_PROTO_TPPP          39              /* TP++ Transport Protocol */
-#define IP_PROTO_IL            40              /* IL Transport Protocol */
-#define IP_PROTO_IPV6          41              /* IPv6 */
-#define IP_PROTO_SDRP          42              /* Source Demand Routing */
-#define IP_PROTO_ROUTING       43              /* IPv6 routing header */
-#define IP_PROTO_FRAGMENT      44              /* IPv6 fragmentation header */
-#define IP_PROTO_RSVP          46              /* Reservation protocol */
-#define        IP_PROTO_GRE            47              /* General Routing Encap */
-#define IP_PROTO_MHRP          48              /* Mobile Host Routing */
-#define IP_PROTO_ENA           49              /* ENA */
-#define        IP_PROTO_ESP            50              /* Encap Security Payload */
-#define        IP_PROTO_AH             51              /* Authentication Header */
-#define IP_PROTO_INLSP         52              /* Integated Net Layer Sec */
-#define IP_PROTO_SWIPE         53              /* SWIPE */
-#define IP_PROTO_NARP          54              /* NBMA Address Resolution */
-#define        IP_PROTO_MOBILE         55              /* Mobile IP, RFC 2004 */
-#define IP_PROTO_TLSP          56              /* Transport Layer Security */
-#define IP_PROTO_SKIP          57              /* SKIP */
-#define IP_PROTO_ICMPV6                58              /* ICMP for IPv6 */
-#define IP_PROTO_NONE          59              /* IPv6 no next header */
-#define IP_PROTO_DSTOPTS       60              /* IPv6 destination options */
-#define IP_PROTO_ANYHOST       61              /* any host internal proto */
-#define IP_PROTO_CFTP          62              /* CFTP */
-#define IP_PROTO_ANYNET                63              /* any local network */
-#define IP_PROTO_EXPAK         64              /* SATNET and Backroom EXPAK */
-#define IP_PROTO_KRYPTOLAN     65              /* Kryptolan */
-#define IP_PROTO_RVD           66              /* MIT Remote Virtual Disk */
-#define IP_PROTO_IPPC          67              /* Inet Pluribus Packet Core */
-#define IP_PROTO_DISTFS                68              /* any distributed fs */
-#define IP_PROTO_SATMON                69              /* SATNET Monitoring */
-#define IP_PROTO_VISA          70              /* VISA Protocol */
-#define IP_PROTO_IPCV          71              /* Inet Packet Core Utility */
-#define IP_PROTO_CPNX          72              /* Comp Proto Net Executive */
-#define IP_PROTO_CPHB          73              /* Comp Protocol Heart Beat */
-#define IP_PROTO_WSN           74              /* Wang Span Network */
-#define IP_PROTO_PVP           75              /* Packet Video Protocol */
-#define IP_PROTO_BRSATMON      76              /* Backroom SATNET Monitor */
-#define IP_PROTO_SUNND         77              /* SUN ND Protocol */
-#define IP_PROTO_WBMON         78              /* WIDEBAND Monitoring */
-#define IP_PROTO_WBEXPAK       79              /* WIDEBAND EXPAK */
-#define        IP_PROTO_EON            80              /* ISO CNLP */
-#define IP_PROTO_VMTP          81              /* Versatile Msg Transport*/
-#define IP_PROTO_SVMTP         82              /* Secure VMTP */
-#define IP_PROTO_VINES         83              /* VINES */
-#define IP_PROTO_TTP           84              /* TTP */
-#define IP_PROTO_NSFIGP                85              /* NSFNET-IGP */
-#define IP_PROTO_DGP           86              /* Dissimilar Gateway Proto */
-#define IP_PROTO_TCF           87              /* TCF */
-#define IP_PROTO_EIGRP         88              /* EIGRP */
-#define IP_PROTO_OSPF          89              /* Open Shortest Path First */
-#define IP_PROTO_SPRITERPC     90              /* Sprite RPC Protocol */
-#define IP_PROTO_LARP          91              /* Locus Address Resolution */
-#define IP_PROTO_MTP           92              /* Multicast Transport Proto */
-#define IP_PROTO_AX25          93              /* AX.25 Frames */
-#define IP_PROTO_IPIPENCAP     94              /* yet-another IP encap */
-#define IP_PROTO_MICP          95              /* Mobile Internet Ctrl */
-#define IP_PROTO_SCCSP         96              /* Semaphore Comm Sec Proto */
-#define IP_PROTO_ETHERIP       97              /* Ethernet in IPv4 */
-#define        IP_PROTO_ENCAP          98              /* encapsulation header */
-#define IP_PROTO_ANYENC                99              /* private encryption scheme */
-#define IP_PROTO_GMTP          100             /* GMTP */
-#define IP_PROTO_IFMP          101             /* Ipsilon Flow Mgmt Proto */
-#define IP_PROTO_PNNI          102             /* PNNI over IP */
-#define IP_PROTO_PIM           103             /* Protocol Indep Multicast */
-#define IP_PROTO_ARIS          104             /* ARIS */
-#define IP_PROTO_SCPS          105             /* SCPS */
-#define IP_PROTO_QNX           106             /* QNX */
-#define IP_PROTO_AN            107             /* Active Networks */
-#define IP_PROTO_IPCOMP                108             /* IP Payload Compression */
-#define IP_PROTO_SNP           109             /* Sitara Networks Protocol */
-#define IP_PROTO_COMPAQPEER    110             /* Compaq Peer Protocol */
-#define IP_PROTO_IPXIP         111             /* IPX in IP */
-#define IP_PROTO_VRRP          112             /* Virtual Router Redundancy */
-#define IP_PROTO_PGM           113             /* PGM Reliable Transport */
-#define IP_PROTO_ANY0HOP       114             /* 0-hop protocol */
-#define IP_PROTO_L2TP          115             /* Layer 2 Tunneling Proto */
-#define IP_PROTO_DDX           116             /* D-II Data Exchange (DDX) */
-#define IP_PROTO_IATP          117             /* Interactive Agent Xfer */
-#define IP_PROTO_STP           118             /* Schedule Transfer Proto */
-#define IP_PROTO_SRP           119             /* SpectraLink Radio Proto */
-#define IP_PROTO_UTI           120             /* UTI */
-#define IP_PROTO_SMP           121             /* Simple Message Protocol */
-#define IP_PROTO_SM            122             /* SM */
-#define IP_PROTO_PTP           123             /* Performance Transparency */
-#define IP_PROTO_ISIS          124             /* ISIS over IPv4 */
-#define IP_PROTO_FIRE          125             /* FIRE */
-#define IP_PROTO_CRTP          126             /* Combat Radio Transport */
-#define IP_PROTO_CRUDP         127             /* Combat Radio UDP */
-#define IP_PROTO_SSCOPMCE      128             /* SSCOPMCE */
-#define IP_PROTO_IPLT          129             /* IPLT */
-#define IP_PROTO_SPS           130             /* Secure Packet Shield */
-#define IP_PROTO_PIPE          131             /* Private IP Encap in IP */
-#define IP_PROTO_SCTP          132             /* Stream Ctrl Transmission */
-#define IP_PROTO_FC            133             /* Fibre Channel */
-#define IP_PROTO_RSVPIGN       134             /* RSVP-E2E-IGNORE */
-#define        IP_PROTO_RAW            255             /* Raw IP packets */
-#define IP_PROTO_RESERVED      IP_PROTO_RAW    /* Reserved */
-#define        IP_PROTO_MAX            255
-
-/*
- * Option types (opt_type) - http://www.iana.org/assignments/ip-parameters
- */
-#define IP_OPT_CONTROL         0x00            /* control */
-#define IP_OPT_DEBMEAS         0x40            /* debugging & measurement */
-#define IP_OPT_COPY            0x80            /* copy into all fragments */
-#define IP_OPT_RESERVED1       0x20
-#define IP_OPT_RESERVED2       0x60
-
-#define IP_OPT_EOL       0                     /* end of option list */
-#define IP_OPT_NOP       1                     /* no operation */
-#define IP_OPT_SEC      (2|IP_OPT_COPY)        /* DoD basic security */
-#define IP_OPT_LSRR     (3|IP_OPT_COPY)        /* loose source route */
-#define IP_OPT_TS       (4|IP_OPT_DEBMEAS)     /* timestamp */
-#define IP_OPT_ESEC     (5|IP_OPT_COPY)        /* DoD extended security */
-#define IP_OPT_CIPSO    (6|IP_OPT_COPY)        /* commercial security */
-#define IP_OPT_RR        7                     /* record route */
-#define IP_OPT_SATID    (8|IP_OPT_COPY)        /* stream ID (obsolete) */
-#define IP_OPT_SSRR     (9|IP_OPT_COPY)        /* strict source route */
-#define IP_OPT_ZSU      10                     /* experimental measurement */
-#define IP_OPT_MTUP     11                     /* MTU probe */
-#define IP_OPT_MTUR     12                     /* MTU reply */
-#define IP_OPT_FINN    (13|IP_OPT_COPY|IP_OPT_DEBMEAS) /* exp flow control */
-#define IP_OPT_VISA    (14|IP_OPT_COPY)        /* exp access control */
-#define IP_OPT_ENCODE   15                     /* ??? */
-#define IP_OPT_IMITD   (16|IP_OPT_COPY)        /* IMI traffic descriptor */
-#define IP_OPT_EIP     (17|IP_OPT_COPY)        /* extended IP, RFC 1385 */
-#define IP_OPT_TR      (18|IP_OPT_DEBMEAS)     /* traceroute */
-#define IP_OPT_ADDEXT  (19|IP_OPT_COPY)        /* IPv7 ext addr, RFC 1475 */
-#define IP_OPT_RTRALT  (20|IP_OPT_COPY)        /* router alert, RFC 2113 */
-#define IP_OPT_SDB     (21|IP_OPT_COPY)        /* directed bcast, RFC 1770 */
-#define IP_OPT_NSAPA   (22|IP_OPT_COPY)        /* NSAP addresses */
-#define IP_OPT_DPS     (23|IP_OPT_COPY)        /* dynamic packet state */
-#define IP_OPT_UMP     (24|IP_OPT_COPY)        /* upstream multicast */
-#define IP_OPT_MAX      25
-
-#define IP_OPT_COPIED(o)       ((o) & 0x80)
-#define IP_OPT_CLASS(o)                ((o) & 0x60)
-#define IP_OPT_NUMBER(o)       ((o) & 0x1f)
-#define IP_OPT_TYPEONLY(o)     ((o) == IP_OPT_EOL || (o) == IP_OPT_NOP)
-
-/*
- * Security option data - RFC 791, 3.1
- */
-struct ip_opt_data_sec {
-        uint16_t       s;              /* security */
-        uint16_t       c;              /* compartments */
-        uint16_t       h;              /* handling restrictions */
-        uint8_t                tcc[3];         /* transmission control code */
-} __attribute__((__packed__));
-
-#define IP_OPT_SEC_UNCLASS     0x0000  /* unclassified */
-#define IP_OPT_SEC_CONFID      0xf135  /* confidential */
-#define IP_OPT_SEC_EFTO                0x789a  /* EFTO */
-#define IP_OPT_SEC_MMMM                0xbc4d  /* MMMM */
-#define IP_OPT_SEC_PROG                0x5e26  /* PROG */
-#define IP_OPT_SEC_RESTR       0xaf13  /* restricted */
-#define IP_OPT_SEC_SECRET      0xd788  /* secret */
-#define IP_OPT_SEC_TOPSECRET   0x6bc5  /* top secret */
-
-/*
- * {Loose Source, Record, Strict Source} Route option data - RFC 791, 3.1
- */
-struct ip_opt_data_rr {
-        uint8_t                ptr;            /* from start of option, >= 4 */
-        uint32_t       iplist __flexarr; /* list of IP addresses */
-} __attribute__((__packed__));
-
-/*
- * Timestamp option data - RFC 791, 3.1
- */
-struct ip_opt_data_ts {
-        uint8_t                ptr;            /* from start of option, >= 5 */
-#if DNET_BYTESEX == DNET_BIG_ENDIAN
-        uint8_t                oflw:4,         /* number of IPs skipped */
-                        flg:4;         /* address[ / timestamp] flag */
-#elif DNET_BYTESEX == DNET_LIL_ENDIAN
-        uint8_t                flg:4,
-                        oflw:4;
-#endif
-        uint32_t       ipts __flexarr; /* IP address [/ timestamp] pairs */
-} __attribute__((__packed__));
-
-#define IP_OPT_TS_TSONLY       0       /* timestamps only */
-#define IP_OPT_TS_TSADDR       1       /* IP address / timestamp pairs */
-#define IP_OPT_TS_PRESPEC      3       /* IP address / zero timestamp pairs */
-
-/*
- * Traceroute option data - RFC 1393, 2.2
- */
-struct ip_opt_data_tr {
-        uint16_t       id;             /* ID number */
-        uint16_t       ohc;            /* outbound hop count */
-        uint16_t       rhc;            /* return hop count */
-        uint32_t       origip;         /* originator IP address */
-} __attribute__((__packed__));
-
-/*
- * IP option (following IP header)
- */
-struct ip_opt {
-        uint8_t                opt_type;       /* option type */
-        uint8_t                opt_len;        /* option length >= IP_OPT_LEN */
-        union ip_opt_data {
-                struct ip_opt_data_sec sec;       /* IP_OPT_SEC */
-                struct ip_opt_data_rr  rr;        /* IP_OPT_{L,S}RR */
-                struct ip_opt_data_ts  ts;        /* IP_OPT_TS */
-                uint16_t               satid;     /* IP_OPT_SATID */
-                uint16_t               mtu;       /* IP_OPT_MTU{P,R} */
-                struct ip_opt_data_tr  tr;        /* IP_OPT_TR */
-                uint32_t               addext[2]; /* IP_OPT_ADDEXT */
-                uint16_t               rtralt;    /* IP_OPT_RTRALT */
-                uint32_t               sdb[9];    /* IP_OPT_SDB */
-                uint8_t                        data8[IP_OPT_LEN_MAX - IP_OPT_LEN];
-        } opt_data;
-} __attribute__((__packed__));
-
-#ifndef __GNUC__
-# pragma pack()
-#endif
-
-/*
- * Classful addressing
- */
-#define        IP_CLASSA(i)            (((uint32_t)(i) & htonl(0x80000000)) == \
-                                 htonl(0x00000000))
-#define        IP_CLASSA_NET           (htonl(0xff000000))
-#define        IP_CLASSA_NSHIFT        24
-#define        IP_CLASSA_HOST          (htonl(0x00ffffff))
-#define        IP_CLASSA_MAX           128
-
-#define        IP_CLASSB(i)            (((uint32_t)(i) & htonl(0xc0000000)) == \
-                                 htonl(0x80000000))
-#define        IP_CLASSB_NET           (htonl(0xffff0000))
-#define        IP_CLASSB_NSHIFT        16
-#define        IP_CLASSB_HOST          (htonl(0x0000ffff))
-#define        IP_CLASSB_MAX           65536
-
-#define        IP_CLASSC(i)            (((uint32_t)(i) & htonl(0xe0000000)) == \
-                                 htonl(0xc0000000))
-#define        IP_CLASSC_NET           (htonl(0xffffff00))
-#define        IP_CLASSC_NSHIFT        8
-#define        IP_CLASSC_HOST          (htonl(0x000000ff))
-
-#define        IP_CLASSD(i)            (((uint32_t)(i) & htonl(0xf0000000)) == \
-                                 htonl(0xe0000000))
-/* These ones aren't really net and host fields, but routing needn't know. */
-#define        IP_CLASSD_NET           (htonl(0xf0000000))
-#define        IP_CLASSD_NSHIFT        28
-#define        IP_CLASSD_HOST          (htonl(0x0fffffff))
-#define        IP_MULTICAST(i)         IP_CLASSD(i)
-
-#define        IP_EXPERIMENTAL(i)      (((uint32_t)(i) & htonl(0xf0000000)) == \
-                                 htonl(0xf0000000))
-#define        IP_BADCLASS(i)          (((uint32_t)(i) & htonl(0xf0000000)) == \
-                                 htonl(0xf0000000))
-#define        IP_LOCAL_GROUP(i)       (((uint32_t)(i) & htonl(0xffffff00)) == \
-                                 htonl(0xe0000000))
-/*
- * Reserved addresses
- */
-#define IP_ADDR_ANY            (htonl(0x00000000))     /* 0.0.0.0 */
-#define IP_ADDR_BROADCAST      (htonl(0xffffffff))     /* 255.255.255.255 */
-#define IP_ADDR_LOOPBACK       (htonl(0x7f000001))     /* 127.0.0.1 */
-#define IP_ADDR_MCAST_ALL      (htonl(0xe0000001))     /* 224.0.0.1 */
-#define IP_ADDR_MCAST_LOCAL    (htonl(0xe00000ff))     /* 224.0.0.225 */
-
-#define ip_pack_hdr(hdr, tos, len, id, off, ttl, p, src, dst) do {     \
-        struct ip_hdr *ip_pack_p = (struct ip_hdr *)(hdr);             \
-        ip_pack_p->ip_v = 4; ip_pack_p->ip_hl = 5;                     \
-        ip_pack_p->ip_tos = tos; ip_pack_p->ip_len = htons(len);       \
-        ip_pack_p->ip_id = htons(id); ip_pack_p->ip_off = htons(off);  \
-        ip_pack_p->ip_ttl = ttl; ip_pack_p->ip_p = p;                  \
-        ip_pack_p->ip_src = src; ip_pack_p->ip_dst = dst;              \
-} while (0)
-
-typedef struct ip_handle ip_t;
-
-__BEGIN_DECLS
-ip_t   *ip_open(void);
-size_t  ip_send(ip_t *i, const void *buf, size_t len);
-ip_t   *ip_close(ip_t *i);
-
-char   *ip_ntop(const ip_addr_t *ip, char *dst, size_t len);
-int     ip_pton(const char *src, ip_addr_t *dst);
-char   *ip_ntoa(const ip_addr_t *ip);
-#define         ip_aton ip_pton
-
-size_t  ip_add_option(void *buf, size_t len,
-            int proto, const void *optbuf, size_t optlen);
-void    ip_checksum(void *buf, size_t len);
-
-inline int
-ip_cksum_add(const void *buf, size_t len, int cksum)
-{
-        uint16_t *sp = (uint16_t *)buf;
-        int n, sn;
-
-        sn = len / 2;
-        n = (sn + 15) / 16;
-
-        /* XXX - unroll loop using Duff's device. */
-        switch (sn % 16) {
-        case 0:        do {
-                cksum += *sp++;
-        case 15:
-                cksum += *sp++;
-        case 14:
-                cksum += *sp++;
-        case 13:
-                cksum += *sp++;
-        case 12:
-                cksum += *sp++;
-        case 11:
-                cksum += *sp++;
-        case 10:
-                cksum += *sp++;
-        case 9:
-                cksum += *sp++;
-        case 8:
-                cksum += *sp++;
-        case 7:
-                cksum += *sp++;
-        case 6:
-                cksum += *sp++;
-        case 5:
-                cksum += *sp++;
-        case 4:
-                cksum += *sp++;
-        case 3:
-                cksum += *sp++;
-        case 2:
-                cksum += *sp++;
-        case 1:
-                cksum += *sp++;
-                } while (--n > 0);
-        }
-        if (len & 1)
-                cksum += htons(*(u_char *)sp << 8);
-
-        return (cksum);
-}
-
-inline uint16_t
-ip_cksum_carry(int x)
-{
-        x = (x >> 16) + (x & 0xffff);
-        return ~(x + (x >> 16)) & 0xffff;
-}
-
-__END_DECLS
-
-#endif /* DNET_IP_H */
diff --git a/ext/dnet/dnet/ip6.h b/ext/dnet/dnet/ip6.h
deleted file mode 100644 (file)
index 7fae29b..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * ip6.h
- *
- * Internet Protocol, Version 6 (RFC 2460).
- *
- * Copyright (c) 2002 Dug Song <dugsong@monkey.org>
- *
- * $Id: ip6.h,v 1.6 2004/02/23 10:01:15 dugsong Exp $
- */
-
-#ifndef DNET_IP6_H
-#define DNET_IP6_H
-
-#define IP6_ADDR_LEN   16
-#define IP6_ADDR_BITS  128
-
-#define IP6_HDR_LEN    40              /* IPv6 header length */
-#define IP6_LEN_MIN    IP6_HDR_LEN
-#define IP6_LEN_MAX    65535           /* non-jumbo payload */
-
-#define IP6_MTU_MIN    1280            /* minimum MTU (1024 + 256) */
-
-typedef struct ip6_addr {
-        uint8_t         data[IP6_ADDR_LEN];
-} ip6_addr_t;
-
-#ifndef __GNUC__
-# define __attribute__(x)
-# pragma pack(1)
-#endif
-
-/*
- * IPv6 header
- */
-struct ip6_hdr {
-        union {
-                struct ip6_hdr_ctl {
-                        uint32_t       ip6_un1_flow; /* 20 bits of flow ID */
-                        uint16_t       ip6_un1_plen; /* payload length */
-                        uint8_t                ip6_un1_nxt;  /* next header */
-                        uint8_t                ip6_un1_hlim; /* hop limit */
-                } ip6_un1;
-                uint8_t        ip6_un2_vfc;    /* 4 bits version, top 4 bits class */
-        } ip6_ctlun;
-        ip6_addr_t     ip6_src;
-        ip6_addr_t     ip6_dst;
-} __attribute__((__packed__));
-
-#define ip6_vfc                ip6_ctlun.ip6_un2_vfc
-#define ip6_flow       ip6_ctlun.ip6_un1.ip6_un1_flow
-#define ip6_plen       ip6_ctlun.ip6_un1.ip6_un1_plen
-#define ip6_nxt                ip6_ctlun.ip6_un1.ip6_un1_nxt   /* IP_PROTO_* */
-#define ip6_hlim       ip6_ctlun.ip6_un1.ip6_un1_hlim
-
-#define IP6_VERSION            0x60
-#define IP6_VERSION_MASK       0xf0            /* ip6_vfc version */
-
-#if DNET_BYTESEX == DNET_BIG_ENDIAN
-#define IP6_FLOWINFO_MASK      0x0fffffff      /* ip6_flow info (28 bits) */
-#define IP6_FLOWLABEL_MASK     0x000fffff      /* ip6_flow label (20 bits) */
-#elif DNET_BYTESEX == DNET_LIL_ENDIAN
-#define IP6_FLOWINFO_MASK      0xffffff0f      /* ip6_flow info (28 bits) */
-#define IP6_FLOWLABEL_MASK     0xffff0f00      /* ip6_flow label (20 bits) */
-#endif
-
-/*
- * Hop limit (ip6_hlim)
- */
-#define IP6_HLIM_DEFAULT       64
-#define IP6_HLIM_MAX           255
-
-/*
- * Preferred extension header order from RFC 2460, 4.1:
- *
- * IP_PROTO_IPV6, IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS, IP_PROTO_ROUTING,
- * IP_PROTO_FRAGMENT, IP_PROTO_AH, IP_PROTO_ESP, IP_PROTO_DSTOPTS, IP_PROTO_*
- */
-
-/*
- * Routing header data (IP_PROTO_ROUTING)
- */
-struct ip6_ext_data_routing {
-        uint8_t  type;                 /* routing type */
-        uint8_t  segleft;              /* segments left */
-        /* followed by routing type specific data */
-} __attribute__((__packed__));
-
-struct ip6_ext_data_routing0 {
-        uint8_t  type;                 /* always zero */
-        uint8_t  segleft;              /* segments left */
-        uint8_t  reserved;             /* reserved field */
-        uint8_t  slmap[3];             /* strict/loose bit map */
-        ip6_addr_t  addr[1];           /* up to 23 addresses */
-} __attribute__((__packed__));
-
-/*
- * Fragment header data (IP_PROTO_FRAGMENT)
- */
-struct ip6_ext_data_fragment {
-        uint16_t  offlg;               /* offset, reserved, and flag */
-        uint32_t  ident;               /* identification */
-} __attribute__((__packed__));
-
-/*
- * Fragmentation offset, reserved, and flags (offlg)
- */
-#if DNET_BYTESEX == DNET_BIG_ENDIAN
-#define IP6_OFF_MASK           0xfff8  /* mask out offset from offlg */
-#define IP6_RESERVED_MASK      0x0006  /* reserved bits in offlg */
-#define IP6_MORE_FRAG          0x0001  /* more-fragments flag */
-#elif DNET_BYTESEX == DNET_LIL_ENDIAN
-#define IP6_OFF_MASK           0xf8ff  /* mask out offset from offlg */
-#define IP6_RESERVED_MASK      0x0600  /* reserved bits in offlg */
-#define IP6_MORE_FRAG          0x0100  /* more-fragments flag */
-#endif
-
-/*
- * Option types, for IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS headers
- */
-#define IP6_OPT_PAD1           0x00    /* 00 0 00000 */
-#define IP6_OPT_PADN           0x01    /* 00 0 00001 */
-#define IP6_OPT_JUMBO          0xC2    /* 11 0 00010 = 194 */
-#define IP6_OPT_JUMBO_LEN      6
-#define IP6_OPT_RTALERT                0x05    /* 00 0 00101 */
-#define IP6_OPT_RTALERT_LEN    4
-#define IP6_OPT_RTALERT_MLD    0       /* Datagram contains an MLD message */
-#define IP6_OPT_RTALERT_RSVP   1       /* Datagram contains an RSVP message */
-#define IP6_OPT_RTALERT_ACTNET 2       /* contains an Active Networks msg */
-#define IP6_OPT_LEN_MIN                2
-
-#define IP6_OPT_TYPE(o)                ((o) & 0xC0)    /* high 2 bits of opt_type */
-#define IP6_OPT_TYPE_SKIP      0x00    /* continue processing on failure */
-#define IP6_OPT_TYPE_DISCARD   0x40    /* discard packet on failure */
-#define IP6_OPT_TYPE_FORCEICMP 0x80    /* discard and send ICMP on failure */
-#define IP6_OPT_TYPE_ICMP      0xC0    /* ...only if non-multicast dst */
-
-#define IP6_OPT_MUTABLE                0x20    /* option data may change en route */
-
-/*
- * Extension header (chained via {ip6,ext}_nxt, following IPv6 header)
- */
-struct ip6_ext_hdr {
-        uint8_t  ext_nxt;      /* next header */
-        uint8_t  ext_len;      /* following length in units of 8 octets */
-        union {
-                struct ip6_ext_data_routing    routing;
-                struct ip6_ext_data_fragment   fragment;
-        } ext_data;
-} __attribute__((__packed__));
-
-#ifndef __GNUC__
-# pragma pack()
-#endif
-
-/*
- * Reserved addresses
- */
-#define IP6_ADDR_UNSPEC        \
-        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-#define IP6_ADDR_LOOPBACK \
-        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
-
-#define ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, src, dst) do {      \
-        struct ip6_hdr *ip6 = (struct ip6_hdr *)(hdr);                 \
-        ip6->ip6_flow = htonl(((uint32_t)(fc) << 28) &                 \
-            (IP6_FLOWLABEL_MASK | (fl)));                              \
-        ip6->ip6_vfc = (IP6_VERSION | ((fc) >> 4));                    \
-        ip6->ip6_plen = htons((plen));                                 \
-        ip6->ip6_nxt = (nxt); ip6->ip6_hlim = (hlim);                  \
-        memmove(&ip6->ip6_src, &(src), IP6_ADDR_LEN);                  \
-        memmove(&ip6->ip6_dst, &(dst), IP6_ADDR_LEN);                  \
-} while (0);
-
-__BEGIN_DECLS
-char   *ip6_ntop(const ip6_addr_t *ip6, char *dst, size_t size);
-int     ip6_pton(const char *src, ip6_addr_t *dst);
-char   *ip6_ntoa(const ip6_addr_t *ip6);
-#define         ip6_aton ip6_pton
-
-void    ip6_checksum(void *buf, size_t len);
-__END_DECLS
-
-#endif /* DNET_IP6_H */
diff --git a/ext/dnet/dnet/os.h b/ext/dnet/dnet/os.h
deleted file mode 100644 (file)
index cae2447..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * os.h
- *
- * Sleazy OS-specific defines.
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: os.h,v 1.10 2004/05/04 03:19:42 dugsong Exp $
- */
-
-#ifndef DNET_OS_H
-#define DNET_OS_H
-
-#ifdef _WIN32
-# include <windows.h>
-# include <winsock2.h>
-# include <stdint.h>
-/* XXX */
-# undef IP_OPT_LSRR
-# undef IP_OPT_TS
-# undef IP_OPT_RR
-# undef IP_OPT_SSRR
-#else
-# include <sys/param.h>
-# include <sys/types.h>
-# include <sys/socket.h>
-# include <netinet/in.h>
-# include <arpa/inet.h>
-# include <netdb.h>
-# ifdef __bsdi__
-#  include <machine/types.h>
-   typedef u_int8_t    uint8_t;
-   typedef u_int16_t   uint16_t;
-   typedef u_int32_t   uint32_t;
-   typedef u_int64_t   uint64_t;
-# else
-#  include <inttypes.h>
-# endif
-#endif
-
-#define DNET_LIL_ENDIAN                1234
-#define DNET_BIG_ENDIAN                4321
-
-/* BSD and IRIX */
-#ifdef BYTE_ORDER
-#if BYTE_ORDER == LITTLE_ENDIAN
-# define DNET_BYTESEX          DNET_LIL_ENDIAN
-#elif BYTE_ORDER == BIG_ENDIAN
-# define DNET_BYTESEX          DNET_BIG_ENDIAN
-#endif
-#endif
-
-/* Linux */
-#ifdef __BYTE_ORDER
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# define DNET_BYTESEX          DNET_LIL_ENDIAN
-#elif __BYTE_ORDER == __BIG_ENDIAN
-# define DNET_BYTESEX          DNET_BIG_ENDIAN
-#endif
-#endif
-
-/* Solaris */
-#if defined(_BIT_FIELDS_LTOH)
-# define DNET_BYTESEX          DNET_LIL_ENDIAN
-#elif defined (_BIT_FIELDS_HTOL)
-# define DNET_BYTESEX          DNET_BIG_ENDIAN
-#endif
-
-/* Nastiness from old BIND code. */
-#ifndef DNET_BYTESEX
-# if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
-    defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
-    defined(__alpha__) || defined(__alpha)
-#  define DNET_BYTESEX         DNET_LIL_ENDIAN
-# elif defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
-    defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
-    defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
-    defined(apollo) || defined(__convex__) || defined(_CRAY) || \
-    defined(__hppa) || defined(__hp9000) || \
-    defined(__hp9000s300) || defined(__hp9000s700) || defined(__ia64) || \
-    defined (BIT_ZERO_ON_LEFT) || defined(m68k)
-#  define DNET_BYTESEX         DNET_BIG_ENDIAN
-# else
-#  error "bytesex unknown"
-# endif
-#endif
-
-/* C++ support. */
-#undef __BEGIN_DECLS
-#undef __END_DECLS
-#ifdef __cplusplus
-# define __BEGIN_DECLS extern "C" {
-# define __END_DECLS   } /* extern "C" */
-#else
-# define __BEGIN_DECLS
-# define __END_DECLS
-#endif
-
-/* Support for flexible arrays. */
-#undef __flexarr
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97))
-/* GCC 2.97 supports C99 flexible array members.  */
-# define __flexarr     []
-#else
-# ifdef __GNUC__
-#  define __flexarr    [0]
-# else
-#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
-#   define __flexarr   []
-#  else
-/* Some other non-C99 compiler. Approximate with [1]. */
-#   define __flexarr   [1]
-#  endif
-# endif
-#endif
-
-#endif /* DNET_OS_H */
diff --git a/ext/dnet/dnet/rand.h b/ext/dnet/dnet/rand.h
deleted file mode 100644 (file)
index 4912193..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * rand.h
- *
- * Pseudo-random number generation, based on OpenBSD arc4random().
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- * Copyright (c) 1996 David Mazieres <dm@lcs.mit.edu>
- *
- * $Id: rand.h,v 1.4 2002/04/07 19:01:25 dugsong Exp $
- */
-
-#ifndef DNET_RAND_H
-#define DNET_RAND_H
-
-typedef struct rand_handle rand_t;
-
-__BEGIN_DECLS
-rand_t *rand_open(void);
-
-int     rand_get(rand_t *r, void *buf, size_t len);
-int     rand_set(rand_t *r, const void *seed, size_t len);
-int     rand_add(rand_t *r, const void *buf, size_t len);
-
-uint8_t         rand_uint8(rand_t *r);
-uint16_t rand_uint16(rand_t *r);
-uint32_t rand_uint32(rand_t *r);
-
-int     rand_shuffle(rand_t *r, void *base, size_t nmemb, size_t size);
-
-rand_t *rand_close(rand_t *r);
-__END_DECLS
-
-#endif /* DNET_RAND_H */
diff --git a/ext/dnet/dnet/route.h b/ext/dnet/dnet/route.h
deleted file mode 100644 (file)
index 74c2141..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * route.c
- *
- * Kernel route table operations.
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: route.h,v 1.6 2002/02/04 04:02:22 dugsong Exp $
- */
-
-#ifndef DNET_ROUTE_H
-#define DNET_ROUTE_H
-
-/*
- * Routing table entry
- */
-struct route_entry {
-        struct addr    route_dst;      /* destination address */
-        struct addr    route_gw;       /* gateway address */
-};
-
-typedef struct route_handle route_t;
-
-typedef int (*route_handler)(const struct route_entry *entry, void *arg);
-
-__BEGIN_DECLS
-route_t        *route_open(void);
-int     route_add(route_t *r, const struct route_entry *entry);
-int     route_delete(route_t *r, const struct route_entry *entry);
-int     route_get(route_t *r, struct route_entry *entry);
-int     route_loop(route_t *r, route_handler callback, void *arg);
-route_t        *route_close(route_t *r);
-__END_DECLS
-
-#endif /* DNET_ROUTE_H */
diff --git a/ext/dnet/dnet/tcp.h b/ext/dnet/dnet/tcp.h
deleted file mode 100644 (file)
index 0089463..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * tcp.h
- *
- * Transmission Control Protocol (RFC 793).
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: tcp.h,v 1.17 2004/02/23 10:02:11 dugsong Exp $
- */
-
-#ifndef DNET_TCP_H
-#define DNET_TCP_H
-
-#define TCP_HDR_LEN    20              /* base TCP header length */
-#define TCP_OPT_LEN    2               /* base TCP option length */
-#define TCP_OPT_LEN_MAX        40
-#define TCP_HDR_LEN_MAX        (TCP_HDR_LEN + TCP_OPT_LEN_MAX)
-
-#ifndef __GNUC__
-# define __attribute__(x)
-# pragma pack(1)
-#endif
-
-/*
- * TCP header, without options
- */
-struct tcp_hdr {
-        uint16_t       th_sport;       /* source port */
-        uint16_t       th_dport;       /* destination port */
-        uint32_t       th_seq;         /* sequence number */
-        uint32_t       th_ack;         /* acknowledgment number */
-#if DNET_BYTESEX == DNET_BIG_ENDIAN
-        uint8_t                th_off:4,       /* data offset */
-                        th_x2:4;       /* (unused) */
-#elif DNET_BYTESEX == DNET_LIL_ENDIAN
-        uint8_t                th_x2:4,
-                        th_off:4;
-#else
-# error "need to include <dnet.h>"
-#endif
-        uint8_t                th_flags;       /* control flags */
-        uint16_t       th_win;         /* window */
-        uint16_t       th_sum;         /* checksum */
-        uint16_t       th_urp;         /* urgent pointer */
-};
-
-/*
- * TCP control flags (th_flags)
- */
-#define TH_FIN         0x01            /* end of data */
-#define TH_SYN         0x02            /* synchronize sequence numbers */
-#define TH_RST         0x04            /* reset connection */
-#define TH_PUSH                0x08            /* push */
-#define TH_ACK         0x10            /* acknowledgment number set */
-#define TH_URG         0x20            /* urgent pointer set */
-#define TH_ECE         0x40            /* ECN echo, RFC 3168 */
-#define TH_CWR         0x80            /* congestion window reduced */
-
-#define TCP_PORT_MAX   65535           /* maximum port */
-#define TCP_WIN_MAX    65535           /* maximum (unscaled) window */
-
-/*
- * Sequence number comparison macros
- */
-#define TCP_SEQ_LT(a,b)                ((int)((a)-(b)) < 0)
-#define TCP_SEQ_LEQ(a,b)       ((int)((a)-(b)) <= 0)
-#define TCP_SEQ_GT(a,b)                ((int)((a)-(b)) > 0)
-#define TCP_SEQ_GEQ(a,b)       ((int)((a)-(b)) >= 0)
-
-/*
- * TCP FSM states
- */
-#define TCP_STATE_CLOSED       0       /* closed */
-#define TCP_STATE_LISTEN       1       /* listening from connection */
-#define TCP_STATE_SYN_SENT     2       /* active, have sent SYN */
-#define TCP_STATE_SYN_RECEIVED 3       /* have sent and received SYN */
-
-#define TCP_STATE_ESTABLISHED  4       /* established */
-#define TCP_STATE_CLOSE_WAIT   5       /* rcvd FIN, waiting for close */
-
-#define TCP_STATE_FIN_WAIT_1   6       /* have closed, sent FIN */
-#define TCP_STATE_CLOSING      7       /* closed xchd FIN, await FIN-ACK */
-#define TCP_STATE_LAST_ACK     8       /* had FIN and close, await FIN-ACK */
-
-#define TCP_STATE_FIN_WAIT_2   9       /* have closed, FIN is acked */
-#define TCP_STATE_TIME_WAIT    10      /* in 2*MSL quiet wait after close */
-#define TCP_STATE_MAX          11
-
-/*
- * Options (opt_type) - http://www.iana.org/assignments/tcp-parameters
- */
-#define TCP_OPT_EOL            0       /* end of option list */
-#define TCP_OPT_NOP            1       /* no operation */
-#define TCP_OPT_MSS            2       /* maximum segment size */
-#define TCP_OPT_WSCALE         3       /* window scale factor, RFC 1072 */
-#define TCP_OPT_SACKOK         4       /* SACK permitted, RFC 2018 */
-#define TCP_OPT_SACK           5       /* SACK, RFC 2018 */
-#define TCP_OPT_ECHO           6       /* echo (obsolete), RFC 1072 */
-#define TCP_OPT_ECHOREPLY      7       /* echo reply (obsolete), RFC 1072 */
-#define TCP_OPT_TIMESTAMP      8       /* timestamp, RFC 1323 */
-#define TCP_OPT_POCONN         9       /* partial order conn, RFC 1693 */
-#define TCP_OPT_POSVC          10      /* partial order service, RFC 1693 */
-#define TCP_OPT_CC             11      /* connection count, RFC 1644 */
-#define TCP_OPT_CCNEW          12      /* CC.NEW, RFC 1644 */
-#define TCP_OPT_CCECHO         13      /* CC.ECHO, RFC 1644 */
-#define TCP_OPT_ALTSUM         14      /* alt checksum request, RFC 1146 */
-#define TCP_OPT_ALTSUMDATA     15      /* alt checksum data, RFC 1146 */
-#define TCP_OPT_SKEETER                16      /* Skeeter */
-#define TCP_OPT_BUBBA          17      /* Bubba */
-#define TCP_OPT_TRAILSUM       18      /* trailer checksum */
-#define TCP_OPT_MD5            19      /* MD5 signature, RFC 2385 */
-#define TCP_OPT_SCPS           20      /* SCPS capabilities */
-#define TCP_OPT_SNACK          21      /* selective negative acks */
-#define TCP_OPT_REC            22      /* record boundaries */
-#define TCP_OPT_CORRUPT                23      /* corruption experienced */
-#define TCP_OPT_SNAP           24      /* SNAP */
-#define TCP_OPT_TCPCOMP                26      /* TCP compression filter */
-#define TCP_OPT_MAX            27
-
-#define TCP_OPT_TYPEONLY(type) \
-        ((type) == TCP_OPT_EOL || (type) == TCP_OPT_NOP)
-
-/*
- * TCP option (following TCP header)
- */
-struct tcp_opt {
-        uint8_t                opt_type;       /* option type */
-        uint8_t                opt_len;        /* option length >= TCP_OPT_LEN */
-        union tcp_opt_data {
-                uint16_t       mss;            /* TCP_OPT_MSS */
-                uint8_t                wscale;         /* TCP_OPT_WSCALE */
-                uint16_t       sack[19];       /* TCP_OPT_SACK */
-                uint32_t       echo;           /* TCP_OPT_ECHO{REPLY} */
-                uint32_t       timestamp[2];   /* TCP_OPT_TIMESTAMP */
-                uint32_t       cc;             /* TCP_OPT_CC{NEW,ECHO} */
-                uint8_t                cksum;          /* TCP_OPT_ALTSUM */
-                uint8_t                md5[16];        /* TCP_OPT_MD5 */
-                uint8_t                data8[TCP_OPT_LEN_MAX - TCP_OPT_LEN];
-        } opt_data;
-} __attribute__((__packed__));
-
-#ifndef __GNUC__
-# pragma pack()
-#endif
-
-#define tcp_pack_hdr(hdr, sport, dport, seq, ack, flags, win, urp) do {        \
-        struct tcp_hdr *tcp_pack_p = (struct tcp_hdr *)(hdr);          \
-        tcp_pack_p->th_sport = htons(sport);                           \
-        tcp_pack_p->th_dport = htons(dport);                           \
-        tcp_pack_p->th_seq = htonl(seq);                               \
-        tcp_pack_p->th_ack = htonl(ack);                               \
-        tcp_pack_p->th_x2 = 0; tcp_pack_p->th_off = 5;                 \
-        tcp_pack_p->th_flags = flags;                                  \
-        tcp_pack_p->th_win = htons(win);                               \
-        tcp_pack_p->th_urp = htons(urp);                               \
-} while (0)
-
-#endif /* DNET_TCP_H */
diff --git a/ext/dnet/dnet/udp.h b/ext/dnet/dnet/udp.h
deleted file mode 100644 (file)
index 73839a9..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * udp.h
- *
- * User Datagram Protocol (RFC 768).
- *
- * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- *
- * $Id: udp.h,v 1.8 2002/04/02 05:05:39 dugsong Exp $
- */
-
-#ifndef DNET_UDP_H
-#define DNET_UDP_H
-
-#define UDP_HDR_LEN    8
-
-struct udp_hdr {
-        uint16_t       uh_sport;       /* source port */
-        uint16_t       uh_dport;       /* destination port */
-        uint16_t       uh_ulen;        /* udp length (including header) */
-        uint16_t       uh_sum;         /* udp checksum */
-};
-
-#define UDP_PORT_MAX   65535
-
-#define udp_pack_hdr(hdr, sport, dport, ulen) do {             \
-        struct udp_hdr *udp_pack_p = (struct udp_hdr *)(hdr);  \
-        udp_pack_p->uh_sport = htons(sport);                   \
-        udp_pack_p->uh_dport = htons(dport);                   \
-        udp_pack_p->uh_ulen = htons(ulen);                     \
-} while (0)
-
-#endif /* DNET_UDP_H */
diff --git a/ext/dnet/eth.h b/ext/dnet/eth.h
new file mode 100644 (file)
index 0000000..da30330
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * eth.h
+ *
+ * Ethernet.
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: eth.h,v 1.15 2004/01/03 08:47:23 dugsong Exp $
+ */
+
+#ifndef DNET_ETH_H
+#define DNET_ETH_H
+
+#define ETH_ADDR_LEN   6
+#define ETH_ADDR_BITS  48
+#define ETH_TYPE_LEN   2
+#define ETH_CRC_LEN    4
+#define ETH_HDR_LEN    14
+
+#define ETH_LEN_MIN    64              /* minimum frame length with CRC */
+#define ETH_LEN_MAX    1518            /* maximum frame length with CRC */
+
+#define ETH_MTU                (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN)
+#define ETH_MIN                (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN)
+
+typedef struct eth_addr {
+        uint8_t                data[ETH_ADDR_LEN];
+} eth_addr_t;
+
+struct eth_hdr {
+        eth_addr_t     eth_dst;        /* destination address */
+        eth_addr_t     eth_src;        /* source address */
+        uint16_t       eth_type;       /* payload type */
+};
+
+/*
+ * Ethernet payload types - http://standards.ieee.org/regauth/ethertype
+ */
+#define ETH_TYPE_PUP   0x0200          /* PUP protocol */
+#define ETH_TYPE_IP    0x0800          /* IP protocol */
+#define ETH_TYPE_ARP   0x0806          /* address resolution protocol */
+#define ETH_TYPE_REVARP        0x8035          /* reverse addr resolution protocol */
+#define ETH_TYPE_8021Q 0x8100          /* IEEE 802.1Q VLAN tagging */
+#define ETH_TYPE_IPV6  0x86DD          /* IPv6 protocol */
+#define ETH_TYPE_MPLS  0x8847          /* MPLS */
+#define ETH_TYPE_MPLS_MCAST    0x8848  /* MPLS Multicast */
+#define ETH_TYPE_PPPOEDISC     0x8863  /* PPP Over Ethernet Discovery Stage */
+#define ETH_TYPE_PPPOE 0x8864          /* PPP Over Ethernet Session Stage */
+#define ETH_TYPE_LOOPBACK      0x9000  /* used to test interfaces */
+
+#define ETH_IS_MULTICAST(ea)   (*(ea) & 0x01) /* is address mcast/bcast? */
+
+#define ETH_ADDR_BROADCAST     "\xff\xff\xff\xff\xff\xff"
+
+#define eth_pack_hdr(h, dst, src, type) do {                   \
+        struct eth_hdr *eth_pack_p = (struct eth_hdr *)(h);    \
+        memmove(&eth_pack_p->eth_dst, &(dst), ETH_ADDR_LEN);   \
+        memmove(&eth_pack_p->eth_src, &(src), ETH_ADDR_LEN);   \
+        eth_pack_p->eth_type = htons(type);                    \
+} while (0)
+
+typedef struct eth_handle eth_t;
+
+__BEGIN_DECLS
+eth_t  *eth_open(const char *device);
+int     eth_get(eth_t *e, eth_addr_t *ea);
+int     eth_set(eth_t *e, const eth_addr_t *ea);
+size_t  eth_send(eth_t *e, const void *buf, size_t len);
+eth_t  *eth_close(eth_t *e);
+
+char   *eth_ntop(const eth_addr_t *eth, char *dst, size_t len);
+int     eth_pton(const char *src, eth_addr_t *dst);
+char   *eth_ntoa(const eth_addr_t *eth);
+#define         eth_aton eth_pton
+__END_DECLS
+
+#endif /* DNET_ETH_H */
diff --git a/ext/dnet/fw.h b/ext/dnet/fw.h
new file mode 100644 (file)
index 0000000..ebda8e7
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * fw.h
+ *
+ * Network firewalling operations.
+ *
+ * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: fw.h,v 1.13 2002/12/14 04:02:36 dugsong Exp $
+ */
+
+#ifndef DNET_FW_H
+#define DNET_FW_H
+
+struct fw_rule {
+        char           fw_device[INTF_NAME_LEN]; /* interface name */
+        uint8_t                fw_op;                    /* operation */
+        uint8_t                fw_dir;                   /* direction */
+        uint8_t                fw_proto;                 /* IP protocol */
+        struct addr    fw_src;                   /* src address / net */
+        struct addr    fw_dst;                   /* dst address / net */
+        uint16_t       fw_sport[2];              /* range / ICMP type */
+        uint16_t       fw_dport[2];              /* range / ICMP code */
+};
+
+#define FW_OP_ALLOW    1
+#define FW_OP_BLOCK    2
+
+#define FW_DIR_IN      1
+#define FW_DIR_OUT     2
+
+#define fw_pack_rule(rule, dev, op, dir, p, s, d, sp1, sp2, dp1, dp2)  \
+do {                                                                   \
+        strlcpy((rule)->fw_device, dev, sizeof((rule)->fw_device));    \
+        (rule)->fw_op = op; (rule)->fw_dir = dir;                      \
+        (rule)->fw_proto = p;                                          \
+        memmove(&(rule)->fw_src, &(s), sizeof((rule)->fw_src));                \
+        memmove(&(rule)->fw_dst, &(d), sizeof((rule)->fw_dst));                \
+        (rule)->fw_sport[0] = sp1; (rule)->fw_sport[1] = sp2;          \
+        (rule)->fw_dport[0] = dp1; (rule)->fw_dport[1] = dp2;          \
+} while (0)
+
+typedef struct fw_handle fw_t;
+
+typedef int (*fw_handler)(const struct fw_rule *rule, void *arg);
+
+__BEGIN_DECLS
+fw_t   *fw_open(void);
+int     fw_add(fw_t *f, const struct fw_rule *rule);
+int     fw_delete(fw_t *f, const struct fw_rule *rule);
+int     fw_loop(fw_t *f, fw_handler callback, void *arg);
+fw_t   *fw_close(fw_t *f);
+__END_DECLS
+
+#endif /* DNET_FW_H */
diff --git a/ext/dnet/icmp.h b/ext/dnet/icmp.h
new file mode 100644 (file)
index 0000000..e997d58
--- /dev/null
@@ -0,0 +1,265 @@
+/*
+ * icmp.h
+ *
+ * Internet Control Message Protocol.
+ * RFC 792, 950, 1256, 1393, 1475, 2002, 2521
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: icmp.h,v 1.14 2003/03/16 17:39:17 dugsong Exp $
+ */
+
+#ifndef DNET_ICMP_H
+#define DNET_ICMP_H
+
+#define ICMP_HDR_LEN   4       /* base ICMP header length */
+#define ICMP_LEN_MIN   8       /* minimum ICMP message size, with header */
+
+#ifndef __GNUC__
+# define __attribute__(x)
+# pragma pack(1)
+#endif
+
+/*
+ * ICMP header
+ */
+struct icmp_hdr {
+        uint8_t                icmp_type;      /* type of message, see below */
+        uint8_t                icmp_code;      /* type sub code */
+        uint16_t       icmp_cksum;     /* ones complement cksum of struct */
+};
+
+/*
+ * Types (icmp_type) and codes (icmp_code) -
+ * http://www.iana.org/assignments/icmp-parameters
+ */
+#define                ICMP_CODE_NONE          0       /* for types without codes */
+#define        ICMP_ECHOREPLY          0               /* echo reply */
+#define        ICMP_UNREACH            3               /* dest unreachable, codes: */
+#define                ICMP_UNREACH_NET                0       /* bad net */
+#define                ICMP_UNREACH_HOST               1       /* bad host */
+#define                ICMP_UNREACH_PROTO              2       /* bad protocol */
+#define                ICMP_UNREACH_PORT               3       /* bad port */
+#define                ICMP_UNREACH_NEEDFRAG           4       /* IP_DF caused drop */
+#define                ICMP_UNREACH_SRCFAIL            5       /* src route failed */
+#define                ICMP_UNREACH_NET_UNKNOWN        6       /* unknown net */
+#define                ICMP_UNREACH_HOST_UNKNOWN       7       /* unknown host */
+#define                ICMP_UNREACH_ISOLATED           8       /* src host isolated */
+#define                ICMP_UNREACH_NET_PROHIB         9       /* for crypto devs */
+#define                ICMP_UNREACH_HOST_PROHIB        10      /* ditto */
+#define                ICMP_UNREACH_TOSNET             11      /* bad tos for net */
+#define                ICMP_UNREACH_TOSHOST            12      /* bad tos for host */
+#define                ICMP_UNREACH_FILTER_PROHIB      13      /* prohibited access */
+#define                ICMP_UNREACH_HOST_PRECEDENCE    14      /* precedence error */
+#define                ICMP_UNREACH_PRECEDENCE_CUTOFF  15      /* precedence cutoff */
+#define        ICMP_SRCQUENCH          4               /* packet lost, slow down */
+#define        ICMP_REDIRECT           5               /* shorter route, codes: */
+#define                ICMP_REDIRECT_NET               0       /* for network */
+#define                ICMP_REDIRECT_HOST              1       /* for host */
+#define                ICMP_REDIRECT_TOSNET            2       /* for tos and net */
+#define                ICMP_REDIRECT_TOSHOST           3       /* for tos and host */
+#define        ICMP_ALTHOSTADDR        6               /* alternate host address */
+#define        ICMP_ECHO               8               /* echo service */
+#define        ICMP_RTRADVERT          9               /* router advertise, codes: */
+#define                ICMP_RTRADVERT_NORMAL           0       /* normal */
+#define                ICMP_RTRADVERT_NOROUTE_COMMON 16        /* selective routing */
+#define        ICMP_RTRSOLICIT         10              /* router solicitation */
+#define        ICMP_TIMEXCEED          11              /* time exceeded, code: */
+#define                ICMP_TIMEXCEED_INTRANS          0       /* ttl==0 in transit */
+#define                ICMP_TIMEXCEED_REASS            1       /* ttl==0 in reass */
+#define        ICMP_PARAMPROB          12              /* ip header bad */
+#define                ICMP_PARAMPROB_ERRATPTR         0       /* req. opt. absent */
+#define                ICMP_PARAMPROB_OPTABSENT        1       /* req. opt. absent */
+#define                ICMP_PARAMPROB_LENGTH           2       /* bad length */
+#define        ICMP_TSTAMP             13              /* timestamp request */
+#define        ICMP_TSTAMPREPLY        14              /* timestamp reply */
+#define        ICMP_INFO               15              /* information request */
+#define        ICMP_INFOREPLY          16              /* information reply */
+#define        ICMP_MASK               17              /* address mask request */
+#define        ICMP_MASKREPLY          18              /* address mask reply */
+#define ICMP_TRACEROUTE                30              /* traceroute */
+#define ICMP_DATACONVERR       31              /* data conversion error */
+#define ICMP_MOBILE_REDIRECT   32              /* mobile host redirect */
+#define ICMP_IPV6_WHEREAREYOU  33              /* IPv6 where-are-you */
+#define ICMP_IPV6_IAMHERE      34              /* IPv6 i-am-here */
+#define ICMP_MOBILE_REG                35              /* mobile registration req */
+#define ICMP_MOBILE_REGREPLY   36              /* mobile registration reply */
+#define ICMP_DNS               37              /* domain name request */
+#define ICMP_DNSREPLY          38              /* domain name reply */
+#define ICMP_SKIP              39              /* SKIP */
+#define ICMP_PHOTURIS          40              /* Photuris */
+#define                ICMP_PHOTURIS_UNKNOWN_INDEX     0       /* unknown sec index */
+#define                ICMP_PHOTURIS_AUTH_FAILED       1       /* auth failed */
+#define                ICMP_PHOTURIS_DECOMPRESS_FAILED 2       /* decompress failed */
+#define                ICMP_PHOTURIS_DECRYPT_FAILED    3       /* decrypt failed */
+#define                ICMP_PHOTURIS_NEED_AUTHN        4       /* no authentication */
+#define                ICMP_PHOTURIS_NEED_AUTHZ        5       /* no authorization */
+#define        ICMP_TYPE_MAX           40
+
+#define        ICMP_INFOTYPE(type)                                             \
+        ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO ||            \
+        (type) == ICMP_RTRADVERT || (type) == ICMP_RTRSOLICIT ||       \
+        (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY ||         \
+        (type) == ICMP_INFO || (type) == ICMP_INFOREPLY ||             \
+        (type) == ICMP_MASK || (type) == ICMP_MASKREPLY)
+
+/*
+ * Echo message data
+ */
+struct icmp_msg_echo {
+        uint16_t       icmp_id;
+        uint16_t       icmp_seq;
+        uint8_t                icmp_data __flexarr;    /* optional data */
+};
+
+/*
+ * Fragmentation-needed (unreachable) message data
+ */
+struct icmp_msg_needfrag {
+        uint16_t       icmp_void;              /* must be zero */
+        uint16_t       icmp_mtu;               /* MTU of next-hop network */
+        uint8_t                icmp_ip __flexarr;      /* IP hdr + 8 bytes of pkt */
+};
+
+/*
+ *  Unreachable, source quench, redirect, time exceeded,
+ *  parameter problem message data
+ */
+struct icmp_msg_quote {
+        uint32_t       icmp_void;              /* must be zero */
+#define icmp_gwaddr    icmp_void               /* router IP address to use */
+#define icmp_pptr      icmp_void               /* ptr to bad octet field */
+        uint8_t                icmp_ip __flexarr;      /* IP hdr + 8 bytes of pkt */
+};
+
+/*
+ * Router advertisement message data, RFC 1256
+ */
+struct icmp_msg_rtradvert {
+        uint8_t                icmp_num_addrs;         /* # of address / pref pairs */
+        uint8_t                icmp_wpa;               /* words / address == 2 */
+        uint16_t       icmp_lifetime;          /* route lifetime in seconds */
+        struct icmp_msg_rtr_data {
+                uint32_t       icmp_void;
+#define icmp_gwaddr            icmp_void       /* router IP address */
+                uint32_t       icmp_pref;      /* router preference (usu 0) */
+        } icmp_rtr __flexarr;                  /* variable # of routers */
+};
+#define ICMP_RTR_PREF_NODEFAULT        0x80000000      /* do not use as default gw */
+
+/*
+ * Timestamp message data
+ */
+struct icmp_msg_tstamp {
+        uint32_t       icmp_id;                /* identifier */
+        uint32_t       icmp_seq;               /* sequence number */
+        uint32_t       icmp_ts_orig;           /* originate timestamp */
+        uint32_t       icmp_ts_rx;             /* receive timestamp */
+        uint32_t       icmp_ts_tx;             /* transmit timestamp */
+};
+
+/*
+ * Address mask message data, RFC 950
+ */
+struct icmp_msg_mask {
+        uint32_t       icmp_id;                /* identifier */
+        uint32_t       icmp_seq;               /* sequence number */
+        uint32_t       icmp_mask;              /* address mask */
+};
+
+/*
+ * Traceroute message data, RFC 1393, RFC 1812
+ */
+struct icmp_msg_traceroute {
+        uint16_t       icmp_id;                /* identifier */
+        uint16_t       icmp_void;              /* unused */
+        uint16_t       icmp_ohc;               /* outbound hop count */
+        uint16_t       icmp_rhc;               /* return hop count */
+        uint32_t       icmp_speed;             /* link speed, bytes/sec */
+        uint32_t       icmp_mtu;               /* MTU in bytes */
+};
+
+/*
+ * Domain name reply message data, RFC 1788
+ */
+struct icmp_msg_dnsreply {
+        uint16_t       icmp_id;                /* identifier */
+        uint16_t       icmp_seq;               /* sequence number */
+        uint32_t       icmp_ttl;               /* time-to-live */
+        uint8_t                icmp_names __flexarr;   /* variable number of names */
+};
+
+/*
+ * Generic identifier, sequence number data
+ */
+struct icmp_msg_idseq {
+        uint16_t       icmp_id;
+        uint16_t       icmp_seq;
+};
+
+/*
+ * ICMP message union
+ */
+union icmp_msg {
+        struct icmp_msg_echo      echo;        /* ICMP_ECHO{REPLY} */
+        struct icmp_msg_quote     unreach;     /* ICMP_UNREACH */
+        struct icmp_msg_needfrag   needfrag;   /* ICMP_UNREACH_NEEDFRAG */
+        struct icmp_msg_quote     srcquench;   /* ICMP_SRCQUENCH */
+        struct icmp_msg_quote     redirect;    /* ICMP_REDIRECT (set to 0) */
+        uint32_t                  rtrsolicit;  /* ICMP_RTRSOLICIT */
+        struct icmp_msg_rtradvert  rtradvert;  /* ICMP_RTRADVERT */
+        struct icmp_msg_quote     timexceed;   /* ICMP_TIMEXCEED */
+        struct icmp_msg_quote     paramprob;   /* ICMP_PARAMPROB */
+        struct icmp_msg_tstamp    tstamp;      /* ICMP_TSTAMP{REPLY} */
+        struct icmp_msg_idseq     info;        /* ICMP_INFO{REPLY} */
+        struct icmp_msg_mask      mask;        /* ICMP_MASK{REPLY} */
+        struct icmp_msg_traceroute traceroute; /* ICMP_TRACEROUTE */
+        struct icmp_msg_idseq     dns;         /* ICMP_DNS */
+        struct icmp_msg_dnsreply   dnsreply;   /* ICMP_DNSREPLY */
+};
+
+#ifndef __GNUC__
+# pragma pack()
+#endif
+
+#define icmp_pack_hdr(hdr, type, code) do {                            \
+        struct icmp_hdr *icmp_pack_p = (struct icmp_hdr *)(hdr);       \
+        icmp_pack_p->icmp_type = type; icmp_pack_p->icmp_code = code;  \
+} while (0)
+
+#define icmp_pack_hdr_echo(hdr, type, code, id, seq, data, len) do {   \
+        struct icmp_msg_echo *echo_pack_p = (struct icmp_msg_echo *)   \
+                ((uint8_t *)(hdr) + ICMP_HDR_LEN);                     \
+        icmp_pack_hdr(hdr, type, code);                                        \
+        echo_pack_p->icmp_id = htons(id);                              \
+        echo_pack_p->icmp_seq = htons(seq);                            \
+        memmove(echo_pack_p->icmp_data, data, len);                    \
+} while (0)
+
+#define icmp_pack_hdr_quote(hdr, type, code, word, pkt, len) do {      \
+        struct icmp_msg_quote *quote_pack_p = (struct icmp_msg_quote *)        \
+                ((uint8_t *)(hdr) + ICMP_HDR_LEN);                     \
+        icmp_pack_hdr(hdr, type, code);                                        \
+        quote_pack_p->icmp_void = htonl(word);                         \
+        memmove(quote_pack_p->icmp_ip, pkt, len);                      \
+} while (0)
+
+#define icmp_pack_hdr_mask(hdr, type, code, id, seq, mask) do {                \
+        struct icmp_msg_mask *mask_pack_p = (struct icmp_msg_mask *)   \
+                ((uint8_t *)(hdr) + ICMP_HDR_LEN);                     \
+        icmp_pack_hdr(hdr, type, code);                                        \
+        mask_pack_p->icmp_id = htons(id);                              \
+        mask_pack_p->icmp_seq = htons(seq);                            \
+        mask_pack_p->icmp_mask = htonl(mask);                          \
+} while (0)
+
+#define icmp_pack_hdr_needfrag(hdr, type, code, mtu, pkt, len) do {    \
+        struct icmp_msg_needfrag *frag_pack_p =                                \
+        (struct icmp_msg_needfrag *)((uint8_t *)(hdr) + ICMP_HDR_LEN); \
+        icmp_pack_hdr(hdr, type, code);                                        \
+        frag_pack_p->icmp_void = 0;                                    \
+        frag_pack_p->icmp_mtu = htons(mtu);                            \
+        memmove(frag_pack_p->icmp_ip, pkt, len);                       \
+} while (0)
+
+#endif /* DNET_ICMP_H */
diff --git a/ext/dnet/intf.h b/ext/dnet/intf.h
new file mode 100644 (file)
index 0000000..38acd43
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * intf.c
+ *
+ * Network interface operations.
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: intf.h,v 1.16 2004/01/13 07:41:09 dugsong Exp $
+ */
+
+#ifndef DNET_INTF_H
+#define DNET_INTF_H
+
+/*
+ * Interface entry
+ */
+#define INTF_NAME_LEN  16
+
+struct intf_entry {
+        u_int          intf_len;                   /* length of entry */
+        char           intf_name[INTF_NAME_LEN];   /* interface name */
+        u_short                intf_type;                  /* interface type (r/o) */
+        u_short                intf_flags;                 /* interface flags */
+        u_int          intf_mtu;                   /* interface MTU */
+        struct addr    intf_addr;                  /* interface address */
+        struct addr    intf_dst_addr;              /* point-to-point dst */
+        struct addr    intf_link_addr;             /* link-layer address */
+        u_int          intf_alias_num;             /* number of aliases */
+        struct addr    intf_alias_addrs __flexarr; /* array of aliases */
+};
+
+/*
+ * MIB-II interface types - http://www.iana.org/assignments/ianaiftype-mib
+ */
+#define INTF_TYPE_OTHER                1       /* other */
+#define INTF_TYPE_ETH          6       /* Ethernet */
+#define INTF_TYPE_TOKENRING    9       /* Token Ring */
+#define INTF_TYPE_FDDI         15      /* FDDI */
+#define INTF_TYPE_PPP          23      /* Point-to-Point Protocol */
+#define INTF_TYPE_LOOPBACK     24      /* software loopback */
+#define INTF_TYPE_SLIP         28      /* Serial Line Interface Protocol */
+#define INTF_TYPE_TUN          53      /* proprietary virtual/internal */
+
+/*
+ * Interface flags
+ */
+#define INTF_FLAG_UP           0x01    /* enable interface */
+#define INTF_FLAG_LOOPBACK     0x02    /* is a loopback net (r/o) */
+#define INTF_FLAG_POINTOPOINT  0x04    /* point-to-point link (r/o) */
+#define INTF_FLAG_NOARP                0x08    /* disable ARP */
+#define INTF_FLAG_BROADCAST    0x10    /* supports broadcast (r/o) */
+#define INTF_FLAG_MULTICAST    0x20    /* supports multicast (r/o) */
+
+typedef struct intf_handle intf_t;
+
+typedef int (*intf_handler)(const struct intf_entry *entry, void *arg);
+
+__BEGIN_DECLS
+intf_t *intf_open(void);
+int     intf_get(intf_t *i, struct intf_entry *entry);
+int     intf_get_src(intf_t *i, struct intf_entry *entry, struct addr *src);
+int     intf_get_dst(intf_t *i, struct intf_entry *entry, struct addr *dst);
+int     intf_set(intf_t *i, const struct intf_entry *entry);
+int     intf_loop(intf_t *i, intf_handler callback, void *arg);
+intf_t *intf_close(intf_t *i);
+__END_DECLS
+
+#endif /* DNET_INTF_H */
diff --git a/ext/dnet/ip.h b/ext/dnet/ip.h
new file mode 100644 (file)
index 0000000..95b7718
--- /dev/null
@@ -0,0 +1,487 @@
+/*
+ * ip.h
+ *
+ * Internet Protocol (RFC 791).
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: ip.h,v 1.23 2003/03/16 17:39:17 dugsong Exp $
+ */
+
+#ifndef DNET_IP_H
+#define DNET_IP_H
+
+#define IP_ADDR_LEN    4               /* IP address length */
+#define IP_ADDR_BITS   32              /* IP address bits */
+
+#define IP_HDR_LEN     20              /* base IP header length */
+#define IP_OPT_LEN     2               /* base IP option length */
+#define IP_OPT_LEN_MAX 40
+#define IP_HDR_LEN_MAX (IP_HDR_LEN + IP_OPT_LEN_MAX)
+
+#define IP_LEN_MAX     65535
+#define IP_LEN_MIN     IP_HDR_LEN
+
+typedef uint32_t       ip_addr_t;
+
+#ifndef __GNUC__
+# define __attribute__(x)
+# pragma pack(1)
+#endif
+
+/*
+ * IP header, without options
+ */
+struct ip_hdr {
+#if DNET_BYTESEX == DNET_BIG_ENDIAN
+        uint8_t                ip_v:4,         /* version */
+                        ip_hl:4;       /* header length (incl any options) */
+#elif DNET_BYTESEX == DNET_LIL_ENDIAN
+        uint8_t                ip_hl:4,
+                        ip_v:4;
+#else
+# error "need to include <dnet.h>"
+#endif
+        uint8_t                ip_tos;         /* type of service */
+        uint16_t       ip_len;         /* total length (incl header) */
+        uint16_t       ip_id;          /* identification */
+        uint16_t       ip_off;         /* fragment offset and flags */
+        uint8_t                ip_ttl;         /* time to live */
+        uint8_t                ip_p;           /* protocol */
+        uint16_t       ip_sum;         /* checksum */
+        ip_addr_t      ip_src;         /* source address */
+        ip_addr_t      ip_dst;         /* destination address */
+};
+
+/*
+ * Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474")
+ */
+#define IP_TOS_DEFAULT         0x00    /* default */
+#define IP_TOS_LOWDELAY                0x10    /* low delay */
+#define IP_TOS_THROUGHPUT      0x08    /* high throughput */
+#define IP_TOS_RELIABILITY     0x04    /* high reliability */
+#define IP_TOS_LOWCOST         0x02    /* low monetary cost - XXX */
+#define IP_TOS_ECT             0x02    /* ECN-capable transport */
+#define IP_TOS_CE              0x01    /* congestion experienced */
+
+/*
+ * IP precedence (high 3 bits of ip_tos), hopefully unused
+ */
+#define IP_TOS_PREC_ROUTINE            0x00
+#define IP_TOS_PREC_PRIORITY           0x20
+#define IP_TOS_PREC_IMMEDIATE          0x40
+#define IP_TOS_PREC_FLASH              0x60
+#define IP_TOS_PREC_FLASHOVERRIDE      0x80
+#define IP_TOS_PREC_CRITIC_ECP         0xa0
+#define IP_TOS_PREC_INTERNETCONTROL    0xc0
+#define IP_TOS_PREC_NETCONTROL         0xe0
+
+/*
+ * Fragmentation flags (ip_off)
+ */
+#define IP_RF          0x8000          /* reserved */
+#define IP_DF          0x4000          /* don't fragment */
+#define IP_MF          0x2000          /* more fragments (not last frag) */
+#define IP_OFFMASK     0x1fff          /* mask for fragment offset */
+
+/*
+ * Time-to-live (ip_ttl), seconds
+ */
+#define IP_TTL_DEFAULT 64              /* default ttl, RFC 1122, RFC 1340 */
+#define IP_TTL_MAX     255             /* maximum ttl */
+
+/*
+ * Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers
+ */
+#define        IP_PROTO_IP             0               /* dummy for IP */
+#define IP_PROTO_HOPOPTS       IP_PROTO_IP     /* IPv6 hop-by-hop options */
+#define        IP_PROTO_ICMP           1               /* ICMP */
+#define        IP_PROTO_IGMP           2               /* IGMP */
+#define IP_PROTO_GGP           3               /* gateway-gateway protocol */
+#define        IP_PROTO_IPIP           4               /* IP in IP */
+#define IP_PROTO_ST            5               /* ST datagram mode */
+#define        IP_PROTO_TCP            6               /* TCP */
+#define IP_PROTO_CBT           7               /* CBT */
+#define        IP_PROTO_EGP            8               /* exterior gateway protocol */
+#define IP_PROTO_IGP           9               /* interior gateway protocol */
+#define IP_PROTO_BBNRCC                10              /* BBN RCC monitoring */
+#define IP_PROTO_NVP           11              /* Network Voice Protocol */
+#define        IP_PROTO_PUP            12              /* PARC universal packet */
+#define IP_PROTO_ARGUS         13              /* ARGUS */
+#define IP_PROTO_EMCON         14              /* EMCON */
+#define IP_PROTO_XNET          15              /* Cross Net Debugger */
+#define IP_PROTO_CHAOS         16              /* Chaos */
+#define        IP_PROTO_UDP            17              /* UDP */
+#define IP_PROTO_MUX           18              /* multiplexing */
+#define IP_PROTO_DCNMEAS       19              /* DCN measurement */
+#define IP_PROTO_HMP           20              /* Host Monitoring Protocol */
+#define IP_PROTO_PRM           21              /* Packet Radio Measurement */
+#define        IP_PROTO_IDP            22              /* Xerox NS IDP */
+#define IP_PROTO_TRUNK1                23              /* Trunk-1 */
+#define IP_PROTO_TRUNK2                24              /* Trunk-2 */
+#define IP_PROTO_LEAF1         25              /* Leaf-1 */
+#define IP_PROTO_LEAF2         26              /* Leaf-2 */
+#define IP_PROTO_RDP           27              /* "Reliable Datagram" proto */
+#define IP_PROTO_IRTP          28              /* Inet Reliable Transaction */
+#define        IP_PROTO_TP             29              /* ISO TP class 4 */
+#define IP_PROTO_NETBLT                30              /* Bulk Data Transfer */
+#define IP_PROTO_MFPNSP                31              /* MFE Network Services */
+#define IP_PROTO_MERITINP      32              /* Merit Internodal Protocol */
+#define IP_PROTO_SEP           33              /* Sequential Exchange proto */
+#define IP_PROTO_3PC           34              /* Third Party Connect proto */
+#define IP_PROTO_IDPR          35              /* Interdomain Policy Route */
+#define IP_PROTO_XTP           36              /* Xpress Transfer Protocol */
+#define IP_PROTO_DDP           37              /* Datagram Delivery Proto */
+#define IP_PROTO_CMTP          38              /* IDPR Ctrl Message Trans */
+#define IP_PROTO_TPPP          39              /* TP++ Transport Protocol */
+#define IP_PROTO_IL            40              /* IL Transport Protocol */
+#define IP_PROTO_IPV6          41              /* IPv6 */
+#define IP_PROTO_SDRP          42              /* Source Demand Routing */
+#define IP_PROTO_ROUTING       43              /* IPv6 routing header */
+#define IP_PROTO_FRAGMENT      44              /* IPv6 fragmentation header */
+#define IP_PROTO_RSVP          46              /* Reservation protocol */
+#define        IP_PROTO_GRE            47              /* General Routing Encap */
+#define IP_PROTO_MHRP          48              /* Mobile Host Routing */
+#define IP_PROTO_ENA           49              /* ENA */
+#define        IP_PROTO_ESP            50              /* Encap Security Payload */
+#define        IP_PROTO_AH             51              /* Authentication Header */
+#define IP_PROTO_INLSP         52              /* Integated Net Layer Sec */
+#define IP_PROTO_SWIPE         53              /* SWIPE */
+#define IP_PROTO_NARP          54              /* NBMA Address Resolution */
+#define        IP_PROTO_MOBILE         55              /* Mobile IP, RFC 2004 */
+#define IP_PROTO_TLSP          56              /* Transport Layer Security */
+#define IP_PROTO_SKIP          57              /* SKIP */
+#define IP_PROTO_ICMPV6                58              /* ICMP for IPv6 */
+#define IP_PROTO_NONE          59              /* IPv6 no next header */
+#define IP_PROTO_DSTOPTS       60              /* IPv6 destination options */
+#define IP_PROTO_ANYHOST       61              /* any host internal proto */
+#define IP_PROTO_CFTP          62              /* CFTP */
+#define IP_PROTO_ANYNET                63              /* any local network */
+#define IP_PROTO_EXPAK         64              /* SATNET and Backroom EXPAK */
+#define IP_PROTO_KRYPTOLAN     65              /* Kryptolan */
+#define IP_PROTO_RVD           66              /* MIT Remote Virtual Disk */
+#define IP_PROTO_IPPC          67              /* Inet Pluribus Packet Core */
+#define IP_PROTO_DISTFS                68              /* any distributed fs */
+#define IP_PROTO_SATMON                69              /* SATNET Monitoring */
+#define IP_PROTO_VISA          70              /* VISA Protocol */
+#define IP_PROTO_IPCV          71              /* Inet Packet Core Utility */
+#define IP_PROTO_CPNX          72              /* Comp Proto Net Executive */
+#define IP_PROTO_CPHB          73              /* Comp Protocol Heart Beat */
+#define IP_PROTO_WSN           74              /* Wang Span Network */
+#define IP_PROTO_PVP           75              /* Packet Video Protocol */
+#define IP_PROTO_BRSATMON      76              /* Backroom SATNET Monitor */
+#define IP_PROTO_SUNND         77              /* SUN ND Protocol */
+#define IP_PROTO_WBMON         78              /* WIDEBAND Monitoring */
+#define IP_PROTO_WBEXPAK       79              /* WIDEBAND EXPAK */
+#define        IP_PROTO_EON            80              /* ISO CNLP */
+#define IP_PROTO_VMTP          81              /* Versatile Msg Transport*/
+#define IP_PROTO_SVMTP         82              /* Secure VMTP */
+#define IP_PROTO_VINES         83              /* VINES */
+#define IP_PROTO_TTP           84              /* TTP */
+#define IP_PROTO_NSFIGP                85              /* NSFNET-IGP */
+#define IP_PROTO_DGP           86              /* Dissimilar Gateway Proto */
+#define IP_PROTO_TCF           87              /* TCF */
+#define IP_PROTO_EIGRP         88              /* EIGRP */
+#define IP_PROTO_OSPF          89              /* Open Shortest Path First */
+#define IP_PROTO_SPRITERPC     90              /* Sprite RPC Protocol */
+#define IP_PROTO_LARP          91              /* Locus Address Resolution */
+#define IP_PROTO_MTP           92              /* Multicast Transport Proto */
+#define IP_PROTO_AX25          93              /* AX.25 Frames */
+#define IP_PROTO_IPIPENCAP     94              /* yet-another IP encap */
+#define IP_PROTO_MICP          95              /* Mobile Internet Ctrl */
+#define IP_PROTO_SCCSP         96              /* Semaphore Comm Sec Proto */
+#define IP_PROTO_ETHERIP       97              /* Ethernet in IPv4 */
+#define        IP_PROTO_ENCAP          98              /* encapsulation header */
+#define IP_PROTO_ANYENC                99              /* private encryption scheme */
+#define IP_PROTO_GMTP          100             /* GMTP */
+#define IP_PROTO_IFMP          101             /* Ipsilon Flow Mgmt Proto */
+#define IP_PROTO_PNNI          102             /* PNNI over IP */
+#define IP_PROTO_PIM           103             /* Protocol Indep Multicast */
+#define IP_PROTO_ARIS          104             /* ARIS */
+#define IP_PROTO_SCPS          105             /* SCPS */
+#define IP_PROTO_QNX           106             /* QNX */
+#define IP_PROTO_AN            107             /* Active Networks */
+#define IP_PROTO_IPCOMP                108             /* IP Payload Compression */
+#define IP_PROTO_SNP           109             /* Sitara Networks Protocol */
+#define IP_PROTO_COMPAQPEER    110             /* Compaq Peer Protocol */
+#define IP_PROTO_IPXIP         111             /* IPX in IP */
+#define IP_PROTO_VRRP          112             /* Virtual Router Redundancy */
+#define IP_PROTO_PGM           113             /* PGM Reliable Transport */
+#define IP_PROTO_ANY0HOP       114             /* 0-hop protocol */
+#define IP_PROTO_L2TP          115             /* Layer 2 Tunneling Proto */
+#define IP_PROTO_DDX           116             /* D-II Data Exchange (DDX) */
+#define IP_PROTO_IATP          117             /* Interactive Agent Xfer */
+#define IP_PROTO_STP           118             /* Schedule Transfer Proto */
+#define IP_PROTO_SRP           119             /* SpectraLink Radio Proto */
+#define IP_PROTO_UTI           120             /* UTI */
+#define IP_PROTO_SMP           121             /* Simple Message Protocol */
+#define IP_PROTO_SM            122             /* SM */
+#define IP_PROTO_PTP           123             /* Performance Transparency */
+#define IP_PROTO_ISIS          124             /* ISIS over IPv4 */
+#define IP_PROTO_FIRE          125             /* FIRE */
+#define IP_PROTO_CRTP          126             /* Combat Radio Transport */
+#define IP_PROTO_CRUDP         127             /* Combat Radio UDP */
+#define IP_PROTO_SSCOPMCE      128             /* SSCOPMCE */
+#define IP_PROTO_IPLT          129             /* IPLT */
+#define IP_PROTO_SPS           130             /* Secure Packet Shield */
+#define IP_PROTO_PIPE          131             /* Private IP Encap in IP */
+#define IP_PROTO_SCTP          132             /* Stream Ctrl Transmission */
+#define IP_PROTO_FC            133             /* Fibre Channel */
+#define IP_PROTO_RSVPIGN       134             /* RSVP-E2E-IGNORE */
+#define        IP_PROTO_RAW            255             /* Raw IP packets */
+#define IP_PROTO_RESERVED      IP_PROTO_RAW    /* Reserved */
+#define        IP_PROTO_MAX            255
+
+/*
+ * Option types (opt_type) - http://www.iana.org/assignments/ip-parameters
+ */
+#define IP_OPT_CONTROL         0x00            /* control */
+#define IP_OPT_DEBMEAS         0x40            /* debugging & measurement */
+#define IP_OPT_COPY            0x80            /* copy into all fragments */
+#define IP_OPT_RESERVED1       0x20
+#define IP_OPT_RESERVED2       0x60
+
+#define IP_OPT_EOL       0                     /* end of option list */
+#define IP_OPT_NOP       1                     /* no operation */
+#define IP_OPT_SEC      (2|IP_OPT_COPY)        /* DoD basic security */
+#define IP_OPT_LSRR     (3|IP_OPT_COPY)        /* loose source route */
+#define IP_OPT_TS       (4|IP_OPT_DEBMEAS)     /* timestamp */
+#define IP_OPT_ESEC     (5|IP_OPT_COPY)        /* DoD extended security */
+#define IP_OPT_CIPSO    (6|IP_OPT_COPY)        /* commercial security */
+#define IP_OPT_RR        7                     /* record route */
+#define IP_OPT_SATID    (8|IP_OPT_COPY)        /* stream ID (obsolete) */
+#define IP_OPT_SSRR     (9|IP_OPT_COPY)        /* strict source route */
+#define IP_OPT_ZSU      10                     /* experimental measurement */
+#define IP_OPT_MTUP     11                     /* MTU probe */
+#define IP_OPT_MTUR     12                     /* MTU reply */
+#define IP_OPT_FINN    (13|IP_OPT_COPY|IP_OPT_DEBMEAS) /* exp flow control */
+#define IP_OPT_VISA    (14|IP_OPT_COPY)        /* exp access control */
+#define IP_OPT_ENCODE   15                     /* ??? */
+#define IP_OPT_IMITD   (16|IP_OPT_COPY)        /* IMI traffic descriptor */
+#define IP_OPT_EIP     (17|IP_OPT_COPY)        /* extended IP, RFC 1385 */
+#define IP_OPT_TR      (18|IP_OPT_DEBMEAS)     /* traceroute */
+#define IP_OPT_ADDEXT  (19|IP_OPT_COPY)        /* IPv7 ext addr, RFC 1475 */
+#define IP_OPT_RTRALT  (20|IP_OPT_COPY)        /* router alert, RFC 2113 */
+#define IP_OPT_SDB     (21|IP_OPT_COPY)        /* directed bcast, RFC 1770 */
+#define IP_OPT_NSAPA   (22|IP_OPT_COPY)        /* NSAP addresses */
+#define IP_OPT_DPS     (23|IP_OPT_COPY)        /* dynamic packet state */
+#define IP_OPT_UMP     (24|IP_OPT_COPY)        /* upstream multicast */
+#define IP_OPT_MAX      25
+
+#define IP_OPT_COPIED(o)       ((o) & 0x80)
+#define IP_OPT_CLASS(o)                ((o) & 0x60)
+#define IP_OPT_NUMBER(o)       ((o) & 0x1f)
+#define IP_OPT_TYPEONLY(o)     ((o) == IP_OPT_EOL || (o) == IP_OPT_NOP)
+
+/*
+ * Security option data - RFC 791, 3.1
+ */
+struct ip_opt_data_sec {
+        uint16_t       s;              /* security */
+        uint16_t       c;              /* compartments */
+        uint16_t       h;              /* handling restrictions */
+        uint8_t                tcc[3];         /* transmission control code */
+} __attribute__((__packed__));
+
+#define IP_OPT_SEC_UNCLASS     0x0000  /* unclassified */
+#define IP_OPT_SEC_CONFID      0xf135  /* confidential */
+#define IP_OPT_SEC_EFTO                0x789a  /* EFTO */
+#define IP_OPT_SEC_MMMM                0xbc4d  /* MMMM */
+#define IP_OPT_SEC_PROG                0x5e26  /* PROG */
+#define IP_OPT_SEC_RESTR       0xaf13  /* restricted */
+#define IP_OPT_SEC_SECRET      0xd788  /* secret */
+#define IP_OPT_SEC_TOPSECRET   0x6bc5  /* top secret */
+
+/*
+ * {Loose Source, Record, Strict Source} Route option data - RFC 791, 3.1
+ */
+struct ip_opt_data_rr {
+        uint8_t                ptr;            /* from start of option, >= 4 */
+        uint32_t       iplist __flexarr; /* list of IP addresses */
+} __attribute__((__packed__));
+
+/*
+ * Timestamp option data - RFC 791, 3.1
+ */
+struct ip_opt_data_ts {
+        uint8_t                ptr;            /* from start of option, >= 5 */
+#if DNET_BYTESEX == DNET_BIG_ENDIAN
+        uint8_t                oflw:4,         /* number of IPs skipped */
+                        flg:4;         /* address[ / timestamp] flag */
+#elif DNET_BYTESEX == DNET_LIL_ENDIAN
+        uint8_t                flg:4,
+                        oflw:4;
+#endif
+        uint32_t       ipts __flexarr; /* IP address [/ timestamp] pairs */
+} __attribute__((__packed__));
+
+#define IP_OPT_TS_TSONLY       0       /* timestamps only */
+#define IP_OPT_TS_TSADDR       1       /* IP address / timestamp pairs */
+#define IP_OPT_TS_PRESPEC      3       /* IP address / zero timestamp pairs */
+
+/*
+ * Traceroute option data - RFC 1393, 2.2
+ */
+struct ip_opt_data_tr {
+        uint16_t       id;             /* ID number */
+        uint16_t       ohc;            /* outbound hop count */
+        uint16_t       rhc;            /* return hop count */
+        uint32_t       origip;         /* originator IP address */
+} __attribute__((__packed__));
+
+/*
+ * IP option (following IP header)
+ */
+struct ip_opt {
+        uint8_t                opt_type;       /* option type */
+        uint8_t                opt_len;        /* option length >= IP_OPT_LEN */
+        union ip_opt_data {
+                struct ip_opt_data_sec sec;       /* IP_OPT_SEC */
+                struct ip_opt_data_rr  rr;        /* IP_OPT_{L,S}RR */
+                struct ip_opt_data_ts  ts;        /* IP_OPT_TS */
+                uint16_t               satid;     /* IP_OPT_SATID */
+                uint16_t               mtu;       /* IP_OPT_MTU{P,R} */
+                struct ip_opt_data_tr  tr;        /* IP_OPT_TR */
+                uint32_t               addext[2]; /* IP_OPT_ADDEXT */
+                uint16_t               rtralt;    /* IP_OPT_RTRALT */
+                uint32_t               sdb[9];    /* IP_OPT_SDB */
+                uint8_t                        data8[IP_OPT_LEN_MAX - IP_OPT_LEN];
+        } opt_data;
+} __attribute__((__packed__));
+
+#ifndef __GNUC__
+# pragma pack()
+#endif
+
+/*
+ * Classful addressing
+ */
+#define        IP_CLASSA(i)            (((uint32_t)(i) & htonl(0x80000000)) == \
+                                 htonl(0x00000000))
+#define        IP_CLASSA_NET           (htonl(0xff000000))
+#define        IP_CLASSA_NSHIFT        24
+#define        IP_CLASSA_HOST          (htonl(0x00ffffff))
+#define        IP_CLASSA_MAX           128
+
+#define        IP_CLASSB(i)            (((uint32_t)(i) & htonl(0xc0000000)) == \
+                                 htonl(0x80000000))
+#define        IP_CLASSB_NET           (htonl(0xffff0000))
+#define        IP_CLASSB_NSHIFT        16
+#define        IP_CLASSB_HOST          (htonl(0x0000ffff))
+#define        IP_CLASSB_MAX           65536
+
+#define        IP_CLASSC(i)            (((uint32_t)(i) & htonl(0xe0000000)) == \
+                                 htonl(0xc0000000))
+#define        IP_CLASSC_NET           (htonl(0xffffff00))
+#define        IP_CLASSC_NSHIFT        8
+#define        IP_CLASSC_HOST          (htonl(0x000000ff))
+
+#define        IP_CLASSD(i)            (((uint32_t)(i) & htonl(0xf0000000)) == \
+                                 htonl(0xe0000000))
+/* These ones aren't really net and host fields, but routing needn't know. */
+#define        IP_CLASSD_NET           (htonl(0xf0000000))
+#define        IP_CLASSD_NSHIFT        28
+#define        IP_CLASSD_HOST          (htonl(0x0fffffff))
+#define        IP_MULTICAST(i)         IP_CLASSD(i)
+
+#define        IP_EXPERIMENTAL(i)      (((uint32_t)(i) & htonl(0xf0000000)) == \
+                                 htonl(0xf0000000))
+#define        IP_BADCLASS(i)          (((uint32_t)(i) & htonl(0xf0000000)) == \
+                                 htonl(0xf0000000))
+#define        IP_LOCAL_GROUP(i)       (((uint32_t)(i) & htonl(0xffffff00)) == \
+                                 htonl(0xe0000000))
+/*
+ * Reserved addresses
+ */
+#define IP_ADDR_ANY            (htonl(0x00000000))     /* 0.0.0.0 */
+#define IP_ADDR_BROADCAST      (htonl(0xffffffff))     /* 255.255.255.255 */
+#define IP_ADDR_LOOPBACK       (htonl(0x7f000001))     /* 127.0.0.1 */
+#define IP_ADDR_MCAST_ALL      (htonl(0xe0000001))     /* 224.0.0.1 */
+#define IP_ADDR_MCAST_LOCAL    (htonl(0xe00000ff))     /* 224.0.0.225 */
+
+#define ip_pack_hdr(hdr, tos, len, id, off, ttl, p, src, dst) do {     \
+        struct ip_hdr *ip_pack_p = (struct ip_hdr *)(hdr);             \
+        ip_pack_p->ip_v = 4; ip_pack_p->ip_hl = 5;                     \
+        ip_pack_p->ip_tos = tos; ip_pack_p->ip_len = htons(len);       \
+        ip_pack_p->ip_id = htons(id); ip_pack_p->ip_off = htons(off);  \
+        ip_pack_p->ip_ttl = ttl; ip_pack_p->ip_p = p;                  \
+        ip_pack_p->ip_src = src; ip_pack_p->ip_dst = dst;              \
+} while (0)
+
+typedef struct ip_handle ip_t;
+
+__BEGIN_DECLS
+ip_t   *ip_open(void);
+size_t  ip_send(ip_t *i, const void *buf, size_t len);
+ip_t   *ip_close(ip_t *i);
+
+char   *ip_ntop(const ip_addr_t *ip, char *dst, size_t len);
+int     ip_pton(const char *src, ip_addr_t *dst);
+char   *ip_ntoa(const ip_addr_t *ip);
+#define         ip_aton ip_pton
+
+size_t  ip_add_option(void *buf, size_t len,
+            int proto, const void *optbuf, size_t optlen);
+void    ip_checksum(void *buf, size_t len);
+
+inline int
+ip_cksum_add(const void *buf, size_t len, int cksum)
+{
+        uint16_t *sp = (uint16_t *)buf;
+        int n, sn;
+
+        sn = len / 2;
+        n = (sn + 15) / 16;
+
+        /* XXX - unroll loop using Duff's device. */
+        switch (sn % 16) {
+        case 0:        do {
+                cksum += *sp++;
+        case 15:
+                cksum += *sp++;
+        case 14:
+                cksum += *sp++;
+        case 13:
+                cksum += *sp++;
+        case 12:
+                cksum += *sp++;
+        case 11:
+                cksum += *sp++;
+        case 10:
+                cksum += *sp++;
+        case 9:
+                cksum += *sp++;
+        case 8:
+                cksum += *sp++;
+        case 7:
+                cksum += *sp++;
+        case 6:
+                cksum += *sp++;
+        case 5:
+                cksum += *sp++;
+        case 4:
+                cksum += *sp++;
+        case 3:
+                cksum += *sp++;
+        case 2:
+                cksum += *sp++;
+        case 1:
+                cksum += *sp++;
+                } while (--n > 0);
+        }
+        if (len & 1)
+                cksum += htons(*(u_char *)sp << 8);
+
+        return (cksum);
+}
+
+inline uint16_t
+ip_cksum_carry(int x)
+{
+        x = (x >> 16) + (x & 0xffff);
+        return ~(x + (x >> 16)) & 0xffff;
+}
+
+__END_DECLS
+
+#endif /* DNET_IP_H */
diff --git a/ext/dnet/ip6.h b/ext/dnet/ip6.h
new file mode 100644 (file)
index 0000000..7fae29b
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * ip6.h
+ *
+ * Internet Protocol, Version 6 (RFC 2460).
+ *
+ * Copyright (c) 2002 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: ip6.h,v 1.6 2004/02/23 10:01:15 dugsong Exp $
+ */
+
+#ifndef DNET_IP6_H
+#define DNET_IP6_H
+
+#define IP6_ADDR_LEN   16
+#define IP6_ADDR_BITS  128
+
+#define IP6_HDR_LEN    40              /* IPv6 header length */
+#define IP6_LEN_MIN    IP6_HDR_LEN
+#define IP6_LEN_MAX    65535           /* non-jumbo payload */
+
+#define IP6_MTU_MIN    1280            /* minimum MTU (1024 + 256) */
+
+typedef struct ip6_addr {
+        uint8_t         data[IP6_ADDR_LEN];
+} ip6_addr_t;
+
+#ifndef __GNUC__
+# define __attribute__(x)
+# pragma pack(1)
+#endif
+
+/*
+ * IPv6 header
+ */
+struct ip6_hdr {
+        union {
+                struct ip6_hdr_ctl {
+                        uint32_t       ip6_un1_flow; /* 20 bits of flow ID */
+                        uint16_t       ip6_un1_plen; /* payload length */
+                        uint8_t                ip6_un1_nxt;  /* next header */
+                        uint8_t                ip6_un1_hlim; /* hop limit */
+                } ip6_un1;
+                uint8_t        ip6_un2_vfc;    /* 4 bits version, top 4 bits class */
+        } ip6_ctlun;
+        ip6_addr_t     ip6_src;
+        ip6_addr_t     ip6_dst;
+} __attribute__((__packed__));
+
+#define ip6_vfc                ip6_ctlun.ip6_un2_vfc
+#define ip6_flow       ip6_ctlun.ip6_un1.ip6_un1_flow
+#define ip6_plen       ip6_ctlun.ip6_un1.ip6_un1_plen
+#define ip6_nxt                ip6_ctlun.ip6_un1.ip6_un1_nxt   /* IP_PROTO_* */
+#define ip6_hlim       ip6_ctlun.ip6_un1.ip6_un1_hlim
+
+#define IP6_VERSION            0x60
+#define IP6_VERSION_MASK       0xf0            /* ip6_vfc version */
+
+#if DNET_BYTESEX == DNET_BIG_ENDIAN
+#define IP6_FLOWINFO_MASK      0x0fffffff      /* ip6_flow info (28 bits) */
+#define IP6_FLOWLABEL_MASK     0x000fffff      /* ip6_flow label (20 bits) */
+#elif DNET_BYTESEX == DNET_LIL_ENDIAN
+#define IP6_FLOWINFO_MASK      0xffffff0f      /* ip6_flow info (28 bits) */
+#define IP6_FLOWLABEL_MASK     0xffff0f00      /* ip6_flow label (20 bits) */
+#endif
+
+/*
+ * Hop limit (ip6_hlim)
+ */
+#define IP6_HLIM_DEFAULT       64
+#define IP6_HLIM_MAX           255
+
+/*
+ * Preferred extension header order from RFC 2460, 4.1:
+ *
+ * IP_PROTO_IPV6, IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS, IP_PROTO_ROUTING,
+ * IP_PROTO_FRAGMENT, IP_PROTO_AH, IP_PROTO_ESP, IP_PROTO_DSTOPTS, IP_PROTO_*
+ */
+
+/*
+ * Routing header data (IP_PROTO_ROUTING)
+ */
+struct ip6_ext_data_routing {
+        uint8_t  type;                 /* routing type */
+        uint8_t  segleft;              /* segments left */
+        /* followed by routing type specific data */
+} __attribute__((__packed__));
+
+struct ip6_ext_data_routing0 {
+        uint8_t  type;                 /* always zero */
+        uint8_t  segleft;              /* segments left */
+        uint8_t  reserved;             /* reserved field */
+        uint8_t  slmap[3];             /* strict/loose bit map */
+        ip6_addr_t  addr[1];           /* up to 23 addresses */
+} __attribute__((__packed__));
+
+/*
+ * Fragment header data (IP_PROTO_FRAGMENT)
+ */
+struct ip6_ext_data_fragment {
+        uint16_t  offlg;               /* offset, reserved, and flag */
+        uint32_t  ident;               /* identification */
+} __attribute__((__packed__));
+
+/*
+ * Fragmentation offset, reserved, and flags (offlg)
+ */
+#if DNET_BYTESEX == DNET_BIG_ENDIAN
+#define IP6_OFF_MASK           0xfff8  /* mask out offset from offlg */
+#define IP6_RESERVED_MASK      0x0006  /* reserved bits in offlg */
+#define IP6_MORE_FRAG          0x0001  /* more-fragments flag */
+#elif DNET_BYTESEX == DNET_LIL_ENDIAN
+#define IP6_OFF_MASK           0xf8ff  /* mask out offset from offlg */
+#define IP6_RESERVED_MASK      0x0600  /* reserved bits in offlg */
+#define IP6_MORE_FRAG          0x0100  /* more-fragments flag */
+#endif
+
+/*
+ * Option types, for IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS headers
+ */
+#define IP6_OPT_PAD1           0x00    /* 00 0 00000 */
+#define IP6_OPT_PADN           0x01    /* 00 0 00001 */
+#define IP6_OPT_JUMBO          0xC2    /* 11 0 00010 = 194 */
+#define IP6_OPT_JUMBO_LEN      6
+#define IP6_OPT_RTALERT                0x05    /* 00 0 00101 */
+#define IP6_OPT_RTALERT_LEN    4
+#define IP6_OPT_RTALERT_MLD    0       /* Datagram contains an MLD message */
+#define IP6_OPT_RTALERT_RSVP   1       /* Datagram contains an RSVP message */
+#define IP6_OPT_RTALERT_ACTNET 2       /* contains an Active Networks msg */
+#define IP6_OPT_LEN_MIN                2
+
+#define IP6_OPT_TYPE(o)                ((o) & 0xC0)    /* high 2 bits of opt_type */
+#define IP6_OPT_TYPE_SKIP      0x00    /* continue processing on failure */
+#define IP6_OPT_TYPE_DISCARD   0x40    /* discard packet on failure */
+#define IP6_OPT_TYPE_FORCEICMP 0x80    /* discard and send ICMP on failure */
+#define IP6_OPT_TYPE_ICMP      0xC0    /* ...only if non-multicast dst */
+
+#define IP6_OPT_MUTABLE                0x20    /* option data may change en route */
+
+/*
+ * Extension header (chained via {ip6,ext}_nxt, following IPv6 header)
+ */
+struct ip6_ext_hdr {
+        uint8_t  ext_nxt;      /* next header */
+        uint8_t  ext_len;      /* following length in units of 8 octets */
+        union {
+                struct ip6_ext_data_routing    routing;
+                struct ip6_ext_data_fragment   fragment;
+        } ext_data;
+} __attribute__((__packed__));
+
+#ifndef __GNUC__
+# pragma pack()
+#endif
+
+/*
+ * Reserved addresses
+ */
+#define IP6_ADDR_UNSPEC        \
+        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+#define IP6_ADDR_LOOPBACK \
+        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
+
+#define ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, src, dst) do {      \
+        struct ip6_hdr *ip6 = (struct ip6_hdr *)(hdr);                 \
+        ip6->ip6_flow = htonl(((uint32_t)(fc) << 28) &                 \
+            (IP6_FLOWLABEL_MASK | (fl)));                              \
+        ip6->ip6_vfc = (IP6_VERSION | ((fc) >> 4));                    \
+        ip6->ip6_plen = htons((plen));                                 \
+        ip6->ip6_nxt = (nxt); ip6->ip6_hlim = (hlim);                  \
+        memmove(&ip6->ip6_src, &(src), IP6_ADDR_LEN);                  \
+        memmove(&ip6->ip6_dst, &(dst), IP6_ADDR_LEN);                  \
+} while (0);
+
+__BEGIN_DECLS
+char   *ip6_ntop(const ip6_addr_t *ip6, char *dst, size_t size);
+int     ip6_pton(const char *src, ip6_addr_t *dst);
+char   *ip6_ntoa(const ip6_addr_t *ip6);
+#define         ip6_aton ip6_pton
+
+void    ip6_checksum(void *buf, size_t len);
+__END_DECLS
+
+#endif /* DNET_IP6_H */
diff --git a/ext/dnet/os.h b/ext/dnet/os.h
new file mode 100644 (file)
index 0000000..cae2447
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * os.h
+ *
+ * Sleazy OS-specific defines.
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: os.h,v 1.10 2004/05/04 03:19:42 dugsong Exp $
+ */
+
+#ifndef DNET_OS_H
+#define DNET_OS_H
+
+#ifdef _WIN32
+# include <windows.h>
+# include <winsock2.h>
+# include <stdint.h>
+/* XXX */
+# undef IP_OPT_LSRR
+# undef IP_OPT_TS
+# undef IP_OPT_RR
+# undef IP_OPT_SSRR
+#else
+# include <sys/param.h>
+# include <sys/types.h>
+# include <sys/socket.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+# include <netdb.h>
+# ifdef __bsdi__
+#  include <machine/types.h>
+   typedef u_int8_t    uint8_t;
+   typedef u_int16_t   uint16_t;
+   typedef u_int32_t   uint32_t;
+   typedef u_int64_t   uint64_t;
+# else
+#  include <inttypes.h>
+# endif
+#endif
+
+#define DNET_LIL_ENDIAN                1234
+#define DNET_BIG_ENDIAN                4321
+
+/* BSD and IRIX */
+#ifdef BYTE_ORDER
+#if BYTE_ORDER == LITTLE_ENDIAN
+# define DNET_BYTESEX          DNET_LIL_ENDIAN
+#elif BYTE_ORDER == BIG_ENDIAN
+# define DNET_BYTESEX          DNET_BIG_ENDIAN
+#endif
+#endif
+
+/* Linux */
+#ifdef __BYTE_ORDER
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define DNET_BYTESEX          DNET_LIL_ENDIAN
+#elif __BYTE_ORDER == __BIG_ENDIAN
+# define DNET_BYTESEX          DNET_BIG_ENDIAN
+#endif
+#endif
+
+/* Solaris */
+#if defined(_BIT_FIELDS_LTOH)
+# define DNET_BYTESEX          DNET_LIL_ENDIAN
+#elif defined (_BIT_FIELDS_HTOL)
+# define DNET_BYTESEX          DNET_BIG_ENDIAN
+#endif
+
+/* Nastiness from old BIND code. */
+#ifndef DNET_BYTESEX
+# if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
+    defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
+    defined(__alpha__) || defined(__alpha)
+#  define DNET_BYTESEX         DNET_LIL_ENDIAN
+# elif defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
+    defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
+    defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
+    defined(apollo) || defined(__convex__) || defined(_CRAY) || \
+    defined(__hppa) || defined(__hp9000) || \
+    defined(__hp9000s300) || defined(__hp9000s700) || defined(__ia64) || \
+    defined (BIT_ZERO_ON_LEFT) || defined(m68k)
+#  define DNET_BYTESEX         DNET_BIG_ENDIAN
+# else
+#  error "bytesex unknown"
+# endif
+#endif
+
+/* C++ support. */
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS   } /* extern "C" */
+#else
+# define __BEGIN_DECLS
+# define __END_DECLS
+#endif
+
+/* Support for flexible arrays. */
+#undef __flexarr
+#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97))
+/* GCC 2.97 supports C99 flexible array members.  */
+# define __flexarr     []
+#else
+# ifdef __GNUC__
+#  define __flexarr    [0]
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __flexarr   []
+#  else
+/* Some other non-C99 compiler. Approximate with [1]. */
+#   define __flexarr   [1]
+#  endif
+# endif
+#endif
+
+#endif /* DNET_OS_H */
diff --git a/ext/dnet/rand.h b/ext/dnet/rand.h
new file mode 100644 (file)
index 0000000..4912193
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * rand.h
+ *
+ * Pseudo-random number generation, based on OpenBSD arc4random().
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ * Copyright (c) 1996 David Mazieres <dm@lcs.mit.edu>
+ *
+ * $Id: rand.h,v 1.4 2002/04/07 19:01:25 dugsong Exp $
+ */
+
+#ifndef DNET_RAND_H
+#define DNET_RAND_H
+
+typedef struct rand_handle rand_t;
+
+__BEGIN_DECLS
+rand_t *rand_open(void);
+
+int     rand_get(rand_t *r, void *buf, size_t len);
+int     rand_set(rand_t *r, const void *seed, size_t len);
+int     rand_add(rand_t *r, const void *buf, size_t len);
+
+uint8_t         rand_uint8(rand_t *r);
+uint16_t rand_uint16(rand_t *r);
+uint32_t rand_uint32(rand_t *r);
+
+int     rand_shuffle(rand_t *r, void *base, size_t nmemb, size_t size);
+
+rand_t *rand_close(rand_t *r);
+__END_DECLS
+
+#endif /* DNET_RAND_H */
diff --git a/ext/dnet/route.h b/ext/dnet/route.h
new file mode 100644 (file)
index 0000000..74c2141
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * route.c
+ *
+ * Kernel route table operations.
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: route.h,v 1.6 2002/02/04 04:02:22 dugsong Exp $
+ */
+
+#ifndef DNET_ROUTE_H
+#define DNET_ROUTE_H
+
+/*
+ * Routing table entry
+ */
+struct route_entry {
+        struct addr    route_dst;      /* destination address */
+        struct addr    route_gw;       /* gateway address */
+};
+
+typedef struct route_handle route_t;
+
+typedef int (*route_handler)(const struct route_entry *entry, void *arg);
+
+__BEGIN_DECLS
+route_t        *route_open(void);
+int     route_add(route_t *r, const struct route_entry *entry);
+int     route_delete(route_t *r, const struct route_entry *entry);
+int     route_get(route_t *r, struct route_entry *entry);
+int     route_loop(route_t *r, route_handler callback, void *arg);
+route_t        *route_close(route_t *r);
+__END_DECLS
+
+#endif /* DNET_ROUTE_H */
diff --git a/ext/dnet/tcp.h b/ext/dnet/tcp.h
new file mode 100644 (file)
index 0000000..0089463
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * tcp.h
+ *
+ * Transmission Control Protocol (RFC 793).
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: tcp.h,v 1.17 2004/02/23 10:02:11 dugsong Exp $
+ */
+
+#ifndef DNET_TCP_H
+#define DNET_TCP_H
+
+#define TCP_HDR_LEN    20              /* base TCP header length */
+#define TCP_OPT_LEN    2               /* base TCP option length */
+#define TCP_OPT_LEN_MAX        40
+#define TCP_HDR_LEN_MAX        (TCP_HDR_LEN + TCP_OPT_LEN_MAX)
+
+#ifndef __GNUC__
+# define __attribute__(x)
+# pragma pack(1)
+#endif
+
+/*
+ * TCP header, without options
+ */
+struct tcp_hdr {
+        uint16_t       th_sport;       /* source port */
+        uint16_t       th_dport;       /* destination port */
+        uint32_t       th_seq;         /* sequence number */
+        uint32_t       th_ack;         /* acknowledgment number */
+#if DNET_BYTESEX == DNET_BIG_ENDIAN
+        uint8_t                th_off:4,       /* data offset */
+                        th_x2:4;       /* (unused) */
+#elif DNET_BYTESEX == DNET_LIL_ENDIAN
+        uint8_t                th_x2:4,
+                        th_off:4;
+#else
+# error "need to include <dnet.h>"
+#endif
+        uint8_t                th_flags;       /* control flags */
+        uint16_t       th_win;         /* window */
+        uint16_t       th_sum;         /* checksum */
+        uint16_t       th_urp;         /* urgent pointer */
+};
+
+/*
+ * TCP control flags (th_flags)
+ */
+#define TH_FIN         0x01            /* end of data */
+#define TH_SYN         0x02            /* synchronize sequence numbers */
+#define TH_RST         0x04            /* reset connection */
+#define TH_PUSH                0x08            /* push */
+#define TH_ACK         0x10            /* acknowledgment number set */
+#define TH_URG         0x20            /* urgent pointer set */
+#define TH_ECE         0x40            /* ECN echo, RFC 3168 */
+#define TH_CWR         0x80            /* congestion window reduced */
+
+#define TCP_PORT_MAX   65535           /* maximum port */
+#define TCP_WIN_MAX    65535           /* maximum (unscaled) window */
+
+/*
+ * Sequence number comparison macros
+ */
+#define TCP_SEQ_LT(a,b)                ((int)((a)-(b)) < 0)
+#define TCP_SEQ_LEQ(a,b)       ((int)((a)-(b)) <= 0)
+#define TCP_SEQ_GT(a,b)                ((int)((a)-(b)) > 0)
+#define TCP_SEQ_GEQ(a,b)       ((int)((a)-(b)) >= 0)
+
+/*
+ * TCP FSM states
+ */
+#define TCP_STATE_CLOSED       0       /* closed */
+#define TCP_STATE_LISTEN       1       /* listening from connection */
+#define TCP_STATE_SYN_SENT     2       /* active, have sent SYN */
+#define TCP_STATE_SYN_RECEIVED 3       /* have sent and received SYN */
+
+#define TCP_STATE_ESTABLISHED  4       /* established */
+#define TCP_STATE_CLOSE_WAIT   5       /* rcvd FIN, waiting for close */
+
+#define TCP_STATE_FIN_WAIT_1   6       /* have closed, sent FIN */
+#define TCP_STATE_CLOSING      7       /* closed xchd FIN, await FIN-ACK */
+#define TCP_STATE_LAST_ACK     8       /* had FIN and close, await FIN-ACK */
+
+#define TCP_STATE_FIN_WAIT_2   9       /* have closed, FIN is acked */
+#define TCP_STATE_TIME_WAIT    10      /* in 2*MSL quiet wait after close */
+#define TCP_STATE_MAX          11
+
+/*
+ * Options (opt_type) - http://www.iana.org/assignments/tcp-parameters
+ */
+#define TCP_OPT_EOL            0       /* end of option list */
+#define TCP_OPT_NOP            1       /* no operation */
+#define TCP_OPT_MSS            2       /* maximum segment size */
+#define TCP_OPT_WSCALE         3       /* window scale factor, RFC 1072 */
+#define TCP_OPT_SACKOK         4       /* SACK permitted, RFC 2018 */
+#define TCP_OPT_SACK           5       /* SACK, RFC 2018 */
+#define TCP_OPT_ECHO           6       /* echo (obsolete), RFC 1072 */
+#define TCP_OPT_ECHOREPLY      7       /* echo reply (obsolete), RFC 1072 */
+#define TCP_OPT_TIMESTAMP      8       /* timestamp, RFC 1323 */
+#define TCP_OPT_POCONN         9       /* partial order conn, RFC 1693 */
+#define TCP_OPT_POSVC          10      /* partial order service, RFC 1693 */
+#define TCP_OPT_CC             11      /* connection count, RFC 1644 */
+#define TCP_OPT_CCNEW          12      /* CC.NEW, RFC 1644 */
+#define TCP_OPT_CCECHO         13      /* CC.ECHO, RFC 1644 */
+#define TCP_OPT_ALTSUM         14      /* alt checksum request, RFC 1146 */
+#define TCP_OPT_ALTSUMDATA     15      /* alt checksum data, RFC 1146 */
+#define TCP_OPT_SKEETER                16      /* Skeeter */
+#define TCP_OPT_BUBBA          17      /* Bubba */
+#define TCP_OPT_TRAILSUM       18      /* trailer checksum */
+#define TCP_OPT_MD5            19      /* MD5 signature, RFC 2385 */
+#define TCP_OPT_SCPS           20      /* SCPS capabilities */
+#define TCP_OPT_SNACK          21      /* selective negative acks */
+#define TCP_OPT_REC            22      /* record boundaries */
+#define TCP_OPT_CORRUPT                23      /* corruption experienced */
+#define TCP_OPT_SNAP           24      /* SNAP */
+#define TCP_OPT_TCPCOMP                26      /* TCP compression filter */
+#define TCP_OPT_MAX            27
+
+#define TCP_OPT_TYPEONLY(type) \
+        ((type) == TCP_OPT_EOL || (type) == TCP_OPT_NOP)
+
+/*
+ * TCP option (following TCP header)
+ */
+struct tcp_opt {
+        uint8_t                opt_type;       /* option type */
+        uint8_t                opt_len;        /* option length >= TCP_OPT_LEN */
+        union tcp_opt_data {
+                uint16_t       mss;            /* TCP_OPT_MSS */
+                uint8_t                wscale;         /* TCP_OPT_WSCALE */
+                uint16_t       sack[19];       /* TCP_OPT_SACK */
+                uint32_t       echo;           /* TCP_OPT_ECHO{REPLY} */
+                uint32_t       timestamp[2];   /* TCP_OPT_TIMESTAMP */
+                uint32_t       cc;             /* TCP_OPT_CC{NEW,ECHO} */
+                uint8_t                cksum;          /* TCP_OPT_ALTSUM */
+                uint8_t                md5[16];        /* TCP_OPT_MD5 */
+                uint8_t                data8[TCP_OPT_LEN_MAX - TCP_OPT_LEN];
+        } opt_data;
+} __attribute__((__packed__));
+
+#ifndef __GNUC__
+# pragma pack()
+#endif
+
+#define tcp_pack_hdr(hdr, sport, dport, seq, ack, flags, win, urp) do {        \
+        struct tcp_hdr *tcp_pack_p = (struct tcp_hdr *)(hdr);          \
+        tcp_pack_p->th_sport = htons(sport);                           \
+        tcp_pack_p->th_dport = htons(dport);                           \
+        tcp_pack_p->th_seq = htonl(seq);                               \
+        tcp_pack_p->th_ack = htonl(ack);                               \
+        tcp_pack_p->th_x2 = 0; tcp_pack_p->th_off = 5;                 \
+        tcp_pack_p->th_flags = flags;                                  \
+        tcp_pack_p->th_win = htons(win);                               \
+        tcp_pack_p->th_urp = htons(urp);                               \
+} while (0)
+
+#endif /* DNET_TCP_H */
diff --git a/ext/dnet/udp.h b/ext/dnet/udp.h
new file mode 100644 (file)
index 0000000..73839a9
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * udp.h
+ *
+ * User Datagram Protocol (RFC 768).
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * $Id: udp.h,v 1.8 2002/04/02 05:05:39 dugsong Exp $
+ */
+
+#ifndef DNET_UDP_H
+#define DNET_UDP_H
+
+#define UDP_HDR_LEN    8
+
+struct udp_hdr {
+        uint16_t       uh_sport;       /* source port */
+        uint16_t       uh_dport;       /* destination port */
+        uint16_t       uh_ulen;        /* udp length (including header) */
+        uint16_t       uh_sum;         /* udp checksum */
+};
+
+#define UDP_PORT_MAX   65535
+
+#define udp_pack_hdr(hdr, sport, dport, ulen) do {             \
+        struct udp_hdr *udp_pack_p = (struct udp_hdr *)(hdr);  \
+        udp_pack_p->uh_sport = htons(sport);                   \
+        udp_pack_p->uh_dport = htons(dport);                   \
+        udp_pack_p->uh_ulen = htons(ulen);                     \
+} while (0)
+
+#endif /* DNET_UDP_H */
index 85bf95f5bfccf443f93ee111a7dbd2504e14e1bd..ec2939b8b71d7a9708eccfe74ca498ef3ed4037a 100644 (file)
@@ -28,8 +28,6 @@
 #
 # Authors: Nathan Binkert
 
-import os, subprocess
-
 Import('env')
 
 env.Library('gzstream', [File('gzstream.cc')])