diff options
author | Stefan Siegl <stesie@brokenpipe.de> | 2007-10-08 21:59:10 +0000 |
---|---|---|
committer | Stefan Siegl <stesie@brokenpipe.de> | 2007-10-08 21:59:10 +0000 |
commit | 1145e4da1321f80b8f1fe9184bdd8e596f2dcd2a (patch) | |
tree | ebdd0cc6a174d8a585fa93fadfbde01c5f4a96ac /pfinet/glue-include | |
parent | 9ef3092f3172c049beb847d1dca602e2b4b755c5 (diff) |
2007-10-08 Stefan Siegl <stesie@brokenpipe.de>
* config.h (CONFIG_IPV6, CONFIG_IPV6_EUI64): New defines,
set to 1.
* Makefile (ipv6-srcs): New variable.
(LINUXSRCS): Add ipv6-srcs.
* ethernet.c (ethernet_demuxer): Call skb_put instead of changing
skb->len directly, and thus now update skb->tail accordingly.
* pfinet.h (PORTCLASS_INET, PORTCLASS_INET6): New enums.
(trivfs_protid_portclasses, trivfs_protid_nportclasses)
(trivfs_cntl_portclasses, trivfs_cntl_nportclasses): Declare
these.
(pfinet_bootstrap_portclass): New variable.
(pfinet_bind): New function.
* main.c: Define _HACK_ERRNO_H. Include <errno.h>.
(trivfs_protid_portclasses, trivfs_cntl_portclasses): New slots
for PORTCLASS_INET6.
(trivfs_protid_nportclasses, trivfs_cntl_nportclasses): Set to 2.
(pfinet_bootstrap_portclass): New variable.
(pfinet_bind): New function.
(pfinet_activate_ipv6) [CONFIG_IPV6]: New function.
(main) [CONFIG_IPV6]: Call inet6_proto_init.
(main): Reordered to allow pfinet to not be started as a
translator, if pfinet_bind is used. If started as a translator,
treat pfinet_bootstrap_portclass when calling trivfs_startup.
* options.c: Include <net/sock.h>, <net/ip6_fib.h>,
<net/ip6_route.h> and <net/addrconf.h>.
(options): New option `ipv4'.
(options) [CONFIG_IPV6]: New options `ipv6', `address6' and
`gateway6'.
(parse_interface) [CONFIG_IPV6]: Add address6 and gateway6.
(parse_hook_add_interface) [CONFIG_IPV6]: Initialize address6 and
gateway6.
(parse_opt): Parse new args.
* socket-ops.c (S_socket_create): Call either
net_families[PF_INET]->create or net_families[PF_INET6]->create,
depending on receiving master.
(S_socket_create_address): Allow creation of AF_INET6 addresses.
* glue-include/asm/delay.h: New stub file.
* glue-include/linux/ipv6.h: Merged many bits unmodified from Linux
header file.
* glue-include/linux/in6.h: Likewise.
(ipv6mr_ifindex): New define, glue to ipv6mr_interface.
* glue-include/linux/socket.h (SOL_IPV6, SOL_ICMPV6): New defines.
* linux-src/net/ipv6/addrconf.c (ipv6_find_idev, inet6_addr_add)
(inet6_addr_del) [_HURD_]: Make these non-static.
(addrconf_set_dstaddr, addrconf_add_ifaddr, addrconf_del_ifaddr)
[_HURD_]: Don't define these functions.
* linux-src/net/ipv6/route_ipv6.c (ipv6_route_ioctl) [_HURD_]:
Likewise.
* linux-src/net/ipv6/af_inet6.c (inet6_ioctl) [_HURD_]: Don't
define the function, instead #define it to 0.
(inet6_proto_init) [_HURD_]: Don't call sit_init.
* linux-src/net/ipv6/udp_ipv6.c (udp_ioctl) [_HURD_]: Define
to 0.
(udp_v6_get_port): Put empty statement after label to silence
compiler.
* linux-src/net/ipv6/tcp_ipv6.c (tcp_v6_get_port, tcp_v6_rcv):
Likewise.
* linux-src/net/ipv6/icmpv6.c (icmpv6_rcv): Likewise.
(icmpv6_init) [_HURD_]: Don't initialize i_uid and i_gid.
* linux-src/net/ipv6/mcast.c (igmp6_init): Likewise.
* linux-src/net/ipv6/ndisc.c (ndisc_init): Likewise.
* linux-src/net/ipv6/ip6_fib.c (BUG_TRAP): Don't use __FUNCTION__
as a string but a variable, to keep gcc happy.
(fib6_walker_list): Make it non-static, to keep gcc happy.
* linux-src/net/ipv6/ip6_flowlabel.c (fl_create) [_HURD_]: Drop
IPV6_FL_S_USER support, since current->euid is not available.
Diffstat (limited to 'pfinet/glue-include')
-rw-r--r-- | pfinet/glue-include/linux/in6.h | 109 | ||||
-rw-r--r-- | pfinet/glue-include/linux/ipv6.h | 116 | ||||
-rw-r--r-- | pfinet/glue-include/linux/socket.h | 2 |
3 files changed, 227 insertions, 0 deletions
diff --git a/pfinet/glue-include/linux/in6.h b/pfinet/glue-include/linux/in6.h index 260020a6..c3e5dfc4 100644 --- a/pfinet/glue-include/linux/in6.h +++ b/pfinet/glue-include/linux/in6.h @@ -1 +1,110 @@ +#ifndef GLUE_LINUX_IN6_H +#define GLUE_LINUX_IN6_H 1 + #include <netinet/in.h> + +#if 0 +struct ipv6_mreq { + /* IPv6 multicast address of group */ + struct in6_addr ipv6mr_multiaddr; + + /* local IPv6 address of interface */ + int ipv6mr_ifindex; +}; +#endif + +/* In Linux's struct ipv6_mreq the second member is called ipv6mr_ifindex, + * however it's called ipv6mr_interface in ours. + */ +#define ipv6mr_ifindex ipv6mr_interface + +struct in6_flowlabel_req +{ + struct in6_addr flr_dst; + __u32 flr_label; + __u8 flr_action; + __u8 flr_share; + __u16 flr_flags; + __u16 flr_expires; + __u16 flr_linger; + __u32 __flr_pad; + /* Options in format of IPV6_PKTOPTIONS */ +}; + +#define IPV6_FL_A_GET 0 +#define IPV6_FL_A_PUT 1 +#define IPV6_FL_A_RENEW 2 + +#define IPV6_FL_F_CREATE 1 +#define IPV6_FL_F_EXCL 2 + +#define IPV6_FL_S_NONE 0 +#define IPV6_FL_S_EXCL 1 +#define IPV6_FL_S_PROCESS 2 +#define IPV6_FL_S_USER 3 +#define IPV6_FL_S_ANY 255 + + +/* + * Bitmask constant declarations to help applications select out the + * flow label and priority fields. + * + * Note that this are in host byte order while the flowinfo field of + * sockaddr_in6 is in network byte order. + */ + +#define IPV6_FLOWINFO_FLOWLABEL 0x000fffff +#define IPV6_FLOWINFO_PRIORITY 0x0ff00000 + +/* These defintions are obsolete */ +#define IPV6_PRIORITY_UNCHARACTERIZED 0x0000 +#define IPV6_PRIORITY_FILLER 0x0100 +#define IPV6_PRIORITY_UNATTENDED 0x0200 +#define IPV6_PRIORITY_RESERVED1 0x0300 +#define IPV6_PRIORITY_BULK 0x0400 +#define IPV6_PRIORITY_RESERVED2 0x0500 +#define IPV6_PRIORITY_INTERACTIVE 0x0600 +#define IPV6_PRIORITY_CONTROL 0x0700 +#define IPV6_PRIORITY_8 0x0800 +#define IPV6_PRIORITY_9 0x0900 +#define IPV6_PRIORITY_10 0x0a00 +#define IPV6_PRIORITY_11 0x0b00 +#define IPV6_PRIORITY_12 0x0c00 +#define IPV6_PRIORITY_13 0x0d00 +#define IPV6_PRIORITY_14 0x0e00 +#define IPV6_PRIORITY_15 0x0f00 + +/* + * IPv6 TLV options. + */ +#define IPV6_TLV_PAD0 0 +#define IPV6_TLV_PADN 1 +#define IPV6_TLV_ROUTERALERT 20 +#define IPV6_TLV_JUMBO 194 + +/* + * IPV6 socket options + */ + +#define IPV6_ADDRFORM 1 +#define IPV6_PKTINFO 2 +#define IPV6_HOPOPTS 3 +#define IPV6_DSTOPTS 4 +#define IPV6_RTHDR 5 +#define IPV6_PKTOPTIONS 6 +#define IPV6_CHECKSUM 7 +#define IPV6_HOPLIMIT 8 +#define IPV6_NEXTHOP 9 +#define IPV6_AUTHHDR 10 +#define IPV6_FLOWINFO 11 + +/* IPV6_MTU_DISCOVER values */ +#define IPV6_PMTUDISC_DONT 0 +#define IPV6_PMTUDISC_WANT 1 +#define IPV6_PMTUDISC_DO 2 + +/* Flowlabel */ +#define IPV6_FLOWLABEL_MGR 32 +#define IPV6_FLOWINFO_SEND 33 + +#endif /* not GLUE_LINUX_IN6_H */ diff --git a/pfinet/glue-include/linux/ipv6.h b/pfinet/glue-include/linux/ipv6.h index 374f9b1e..5a1604a3 100644 --- a/pfinet/glue-include/linux/ipv6.h +++ b/pfinet/glue-include/linux/ipv6.h @@ -1 +1,117 @@ +#ifndef _IPV6_H +#define _IPV6_H + #include <linux/in6.h> +#include <asm/byteorder.h> + +/* The latest drafts declared increase in minimal mtu up to 1280. */ + +#define IPV6_MIN_MTU 1280 + +/* + * Advanced API + * source interface/address selection, source routing, etc... + * *under construction* + */ + + +struct in6_ifreq { + struct in6_addr ifr6_addr; + __u32 ifr6_prefixlen; + int ifr6_ifindex; +}; + +#define IPV6_SRCRT_STRICT 0x01 /* this hop must be a neighbor */ +#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */ + +/* + * routing header + */ +struct ipv6_rt_hdr { + __u8 nexthdr; + __u8 hdrlen; + __u8 type; + __u8 segments_left; + + /* + * type specific data + * variable length field + */ +}; + + +struct ipv6_opt_hdr { + __u8 nexthdr; + __u8 hdrlen; + /* + * TLV encoded option data follows. + */ +}; + +#define ipv6_destopt_hdr ipv6_opt_hdr +#define ipv6_hopopt_hdr ipv6_opt_hdr + +#ifdef __KERNEL__ +#define ipv6_optlen(p) (((p)->hdrlen+1) << 3) +#endif + +/* + * routing header type 0 (used in cmsghdr struct) + */ + +struct rt0_hdr { + struct ipv6_rt_hdr rt_hdr; + __u32 bitmap; /* strict/loose bit map */ + struct in6_addr addr[0]; + +#define rt0_type rt_hdr.type; +}; + +/* + * IPv6 fixed header + * + * BEWARE, it is incorrect. The first 4 bits of flow_lbl + * are glued to priority now, forming "class". + */ + +struct ipv6hdr { +#if defined(__LITTLE_ENDIAN_BITFIELD) + __u8 priority:4, + version:4; +#elif defined(__BIG_ENDIAN_BITFIELD) + __u8 version:4, + priority:4; +#else +#error "Please fix <asm/byteorder.h>" +#endif + __u8 flow_lbl[3]; + + __u16 payload_len; + __u8 nexthdr; + __u8 hop_limit; + + struct in6_addr saddr; + struct in6_addr daddr; +}; + +#ifdef __KERNEL__ + +/* + This structure contains results of exthdrs parsing + as offsets from skb->nh. + */ + +struct inet6_skb_parm +{ + int iif; + __u16 ra; + __u16 hop; + __u16 auth; + __u16 dst0; + __u16 srcrt; + __u16 dst1; +}; + +#endif + +#endif diff --git a/pfinet/glue-include/linux/socket.h b/pfinet/glue-include/linux/socket.h index bf37f490..82806d9d 100644 --- a/pfinet/glue-include/linux/socket.h +++ b/pfinet/glue-include/linux/socket.h @@ -22,6 +22,8 @@ #define SOL_IP IPPROTO_IP #define SOL_TCP IPPROTO_TCP +#define SOL_IPV6 IPPROTO_IPV6 +#define SOL_ICMPV6 IPPROTO_ICMPV6 #define SOL_RAW IPPROTO_RAW /* IP options */ |