diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-26 18:35:50 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-26 18:35:50 -0700 |
commit | ee20a0dd5400e771ff93eb7f2bcc731eab1f377e (patch) | |
tree | 43743bd300a5b1ed94888881689e1d6a8ecac1e1 /include | |
parent | d55a4528f7f607ca2872fec18574bc8cec060f05 (diff) | |
parent | 732c8bd590625e8bc0b88313b82930e336b2bec4 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (43 commits)
[IPSEC]: Fix BEET output
[ICMP]: Dst entry leak in icmp_send host re-lookup code (v2).
[AX25]: Remove obsolete references to BKL from TODO file.
[NET]: Fix multicast device ioctl checks
[IRDA]: Store irnet_socket termios properly.
[UML]: uml-net: don't set IFF_ALLMULTI in set_multicast_list
[VLAN]: Don't copy ALLMULTI/PROMISC flags from underlying device
netxen, phy/marvell, skge: minor checkpatch fixes
S2io: Handle TX completions on the same CPU as the sender for MIS-X interrupts
b44: Truncate PHY address
skge napi->poll() locking bug
rndis_host: fix oops when query for OID_GEN_PHYSICAL_MEDIUM fails
cxgb3: Fix lockdep problems with sge.reg_lock
ehea: Fix IPv6 support
dm9000: Support promisc and all-multi modes
dm9601: configure MAC to drop invalid (crc/length) packets
dm9601: add Hirose USB-100 device ID
Marvell PHY m88e1111 driver fix
netxen: fix rx dropped stats
netxen: remove low level tx lock
...
Diffstat (limited to 'include')
-rw-r--r-- | include/net/neighbour.h | 4 | ||||
-rw-r--r-- | include/net/xfrm.h | 29 |
2 files changed, 33 insertions, 0 deletions
diff --git a/include/net/neighbour.h b/include/net/neighbour.h index ebbfb509822e..64a5f0120b52 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -218,6 +218,10 @@ extern unsigned long neigh_rand_reach_time(unsigned long base); extern void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p, struct sk_buff *skb); extern struct pneigh_entry *pneigh_lookup(struct neigh_table *tbl, struct net *net, const void *key, struct net_device *dev, int creat); +extern struct pneigh_entry *__pneigh_lookup(struct neigh_table *tbl, + struct net *net, + const void *key, + struct net_device *dev); extern int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *key, struct net_device *dev); extern void neigh_app_ns(struct neighbour *n); diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 619c53bc3cd2..0d255ae008b6 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -204,6 +204,7 @@ struct xfrm_state * transformer. */ const struct xfrm_type *type; struct xfrm_mode *inner_mode; + struct xfrm_mode *inner_mode_iaf; struct xfrm_mode *outer_mode; /* Security context */ @@ -387,6 +388,27 @@ enum { extern int xfrm_register_mode(struct xfrm_mode *mode, int family); extern int xfrm_unregister_mode(struct xfrm_mode *mode, int family); +static inline int xfrm_af2proto(unsigned int family) +{ + switch(family) { + case AF_INET: + return IPPROTO_IPIP; + case AF_INET6: + return IPPROTO_IPV6; + default: + return 0; + } +} + +static inline struct xfrm_mode *xfrm_ip2inner_mode(struct xfrm_state *x, int ipproto) +{ + if ((ipproto == IPPROTO_IPIP && x->props.family == AF_INET) || + (ipproto == IPPROTO_IPV6 && x->props.family == AF_INET6)) + return x->inner_mode; + else + return x->inner_mode_iaf; +} + struct xfrm_tmpl { /* id in template is interpreted as: @@ -530,6 +552,9 @@ struct xfrm_mode_skb_cb { __be16 id; __be16 frag_off; + /* IP header length (excluding options or extension headers). */ + u8 ihl; + /* TOS for IPv4, class for IPv6. */ u8 tos; @@ -539,6 +564,9 @@ struct xfrm_mode_skb_cb { /* Protocol for IPv4, NH for IPv6. */ u8 protocol; + /* Option length for IPv4, zero for IPv6. */ + u8 optlen; + /* Used by IPv6 only, zero for IPv4. */ u8 flow_lbl[3]; }; @@ -1253,6 +1281,7 @@ extern int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, extern int xfrm_input_resume(struct sk_buff *skb, int nexthdr); extern int xfrm_output_resume(struct sk_buff *skb, int err); extern int xfrm_output(struct sk_buff *skb); +extern int xfrm_inner_extract_output(struct xfrm_state *x, struct sk_buff *skb); extern int xfrm4_extract_header(struct sk_buff *skb); extern int xfrm4_extract_input(struct xfrm_state *x, struct sk_buff *skb); extern int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi, |