[IPv4] Tidy up some header files.
[people/meteger/gpxe.git] / src / include / gpxe / ip6.h
index 1ddba0a..dc0ae31 100644 (file)
@@ -7,18 +7,34 @@
  *
  */
 
-#include <ip.h>
+#include <stdint.h>
+#include <gpxe/in.h>
 
 /* IP6 constants */
 
-#define IP6_VER                6
+#define IP6_VERSION    0x6
+#define IP6_HOP_LIMIT  255
 
-/* IP6 header */
+/**
+ * I/O buffer contents
+ * This is duplicated in tcp.h and here. Ideally it should go into iobuf.h
+ */
+#define MAX_HDR_LEN    100
+#define MAX_IOB_LEN    1500
+#define MIN_IOB_LEN    MAX_HDR_LEN + 100 /* To account for padding by LL */
+
+#define IP6_EQUAL( in6_addr1, in6_addr2 ) \
+        ( memcmp ( ( char* ) &( in6_addr1 ), ( char* ) &( in6_addr2 ),\
+       sizeof ( struct in6_addr ) ) == 0 )
 
+#define IS_UNSPECIFIED( addr ) \
+       ( ( (addr).in6_u.u6_addr32[0] == 0x00000000 ) && \
+       ( (addr).in6_u.u6_addr32[1] == 0x00000000 ) && \
+       ( (addr).in6_u.u6_addr32[2] == 0x00000000 ) && \
+       ( (addr).in6_u.u6_addr32[3] == 0x00000000 ) )
+/* IP6 header */
 struct ip6_header {
-       uint32_t        vers:4,
-                       traffic_class:8,
-                       flow_label:20;
+       uint32_t        ver_traffic_class_flow_label;
        uint16_t        payload_len;
        uint8_t         nxt_hdr;
        uint8_t         hop_limit;
@@ -26,12 +42,37 @@ struct ip6_header {
        struct in6_addr dest;
 };
 
-struct pk_buff;
+/* IP6 pseudo header */
+struct ipv6_pseudo_header {
+       struct in6_addr src;
+       struct in6_addr dest;
+       uint8_t zero_padding;
+       uint8_t nxt_hdr;
+       uint16_t len;
+};
+
+/* Next header numbers */
+#define IP6_HOPBYHOP           0x00
+#define IP6_ROUTING            0x43
+#define IP6_FRAGMENT           0x44
+#define IP6_AUTHENTICATION     0x51
+#define IP6_DEST_OPTS          0x60
+#define IP6_ESP                        0x50
+#define IP6_ICMP6              0x58
+#define IP6_NO_HEADER          0x59
+
+struct io_buffer;
 struct net_device;
 struct net_protocol;
 
 extern struct net_protocol ipv6_protocol;
+extern struct tcpip_net_protocol ipv6_tcpip_protocol;
+extern char * inet6_ntoa ( struct in6_addr in6 );
 
-extern int ipv6_tx ( struct pk_buff *pkb, uint16_t trans_proto, struct in6_addr *dest );
+extern int add_ipv6_address ( struct net_device *netdev,
+                             struct in6_addr prefix, int prefix_len,
+                             struct in6_addr address,
+                             struct in6_addr gateway );
+extern void del_ipv6_address ( struct net_device *netdev );
 
 #endif /* _GPXE_IP6_H */