diff options
| author | James Chapman <jchapman@katalix.com> | 2007-06-27 18:37:46 -0400 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2007-07-11 01:15:57 -0400 |
| commit | 342f0234c71b40da785dd6a7ce1dd481ecbfdb81 (patch) | |
| tree | b6d7295cd484449f3f6478fe3e796fc8988534a3 /include/linux | |
| parent | 4417da668c0021903464f92db278ddae348e0299 (diff) | |
[UDP]: Introduce UDP encapsulation type for L2TP
This patch adds a new UDP_ENCAP_L2TPINUDP encapsulation type for UDP
sockets. When a UDP socket's encap_type is UDP_ENCAP_L2TPINUDP, the
skb is delivered to a function pointed to by the udp_sock's
encap_rcv funcptr. If the skb isn't wanted by L2TP, it returns >0, which
causes it to be passed through to UDP.
Include padding to put the new encap_rcv field on a 4-byte boundary.
Previously, the only user of UDP encap sockets was ESP, so when
CONFIG_XFRM was not defined, some of the encap code was compiled
out. This patch changes that. As a result, udp_encap_rcv() will
now do a little more work when CONFIG_XFRM is not defined.
Signed-off-by: James Chapman <jchapman@katalix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/udp.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/udp.h b/include/linux/udp.h index 6de445c31a64..8ec703f462da 100644 --- a/include/linux/udp.h +++ b/include/linux/udp.h | |||
| @@ -42,6 +42,7 @@ static inline struct udphdr *udp_hdr(const struct sk_buff *skb) | |||
| 42 | /* UDP encapsulation types */ | 42 | /* UDP encapsulation types */ |
| 43 | #define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ | 43 | #define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ |
| 44 | #define UDP_ENCAP_ESPINUDP 2 /* draft-ietf-ipsec-udp-encaps-06 */ | 44 | #define UDP_ENCAP_ESPINUDP 2 /* draft-ietf-ipsec-udp-encaps-06 */ |
| 45 | #define UDP_ENCAP_L2TPINUDP 3 /* rfc2661 */ | ||
| 45 | 46 | ||
| 46 | #ifdef __KERNEL__ | 47 | #ifdef __KERNEL__ |
| 47 | #include <linux/types.h> | 48 | #include <linux/types.h> |
| @@ -70,6 +71,11 @@ struct udp_sock { | |||
| 70 | #define UDPLITE_SEND_CC 0x2 /* set via udplite setsockopt */ | 71 | #define UDPLITE_SEND_CC 0x2 /* set via udplite setsockopt */ |
| 71 | #define UDPLITE_RECV_CC 0x4 /* set via udplite setsocktopt */ | 72 | #define UDPLITE_RECV_CC 0x4 /* set via udplite setsocktopt */ |
| 72 | __u8 pcflag; /* marks socket as UDP-Lite if > 0 */ | 73 | __u8 pcflag; /* marks socket as UDP-Lite if > 0 */ |
| 74 | __u8 unused[3]; | ||
| 75 | /* | ||
| 76 | * For encapsulation sockets. | ||
| 77 | */ | ||
| 78 | int (*encap_rcv)(struct sock *sk, struct sk_buff *skb); | ||
| 73 | }; | 79 | }; |
| 74 | 80 | ||
| 75 | static inline struct udp_sock *udp_sk(const struct sock *sk) | 81 | static inline struct udp_sock *udp_sk(const struct sock *sk) |
