summaryrefslogtreecommitdiffstats
path: root/include/net/xfrm.h
diff options
context:
space:
mode:
authorSteffen Klassert <steffen.klassert@secunet.com>2014-03-14 02:28:07 -0400
committerSteffen Klassert <steffen.klassert@secunet.com>2014-03-14 02:28:07 -0400
commit7e14ea1521d9249d9de7f0ea39c9af054745eebd (patch)
treeae286e642876c489f2602a4ffffb79796bfebb24 /include/net/xfrm.h
parent2f32b51b609faea1e40bb8c5bd305f1351740936 (diff)
xfrm6: Add IPsec protocol multiplexer
This patch adds an IPsec protocol multiplexer for ipv6. With this it is possible to add alternative protocol handlers, as needed for IPsec virtual tunnel interfaces. Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'include/net/xfrm.h')
-rw-r--r--include/net/xfrm.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index af13599b60a0..6304ec394c4a 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1374,6 +1374,16 @@ struct xfrm4_protocol {
1374 int priority; 1374 int priority;
1375}; 1375};
1376 1376
1377struct xfrm6_protocol {
1378 int (*handler)(struct sk_buff *skb);
1379 int (*cb_handler)(struct sk_buff *skb, int err);
1380 int (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt,
1381 u8 type, u8 code, int offset, __be32 info);
1382
1383 struct xfrm6_protocol __rcu *next;
1384 int priority;
1385};
1386
1377/* XFRM tunnel handlers. */ 1387/* XFRM tunnel handlers. */
1378struct xfrm_tunnel { 1388struct xfrm_tunnel {
1379 int (*handler)(struct sk_buff *skb); 1389 int (*handler)(struct sk_buff *skb);
@@ -1408,6 +1418,8 @@ int xfrm6_init(void);
1408void xfrm6_fini(void); 1418void xfrm6_fini(void);
1409int xfrm6_state_init(void); 1419int xfrm6_state_init(void);
1410void xfrm6_state_fini(void); 1420void xfrm6_state_fini(void);
1421int xfrm6_protocol_init(void);
1422void xfrm6_protocol_fini(void);
1411#else 1423#else
1412static inline int xfrm6_init(void) 1424static inline int xfrm6_init(void)
1413{ 1425{
@@ -1552,6 +1564,9 @@ int xfrm6_rcv(struct sk_buff *skb);
1552int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr, 1564int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
1553 xfrm_address_t *saddr, u8 proto); 1565 xfrm_address_t *saddr, u8 proto);
1554void xfrm6_local_error(struct sk_buff *skb, u32 mtu); 1566void xfrm6_local_error(struct sk_buff *skb, u32 mtu);
1567int xfrm6_rcv_cb(struct sk_buff *skb, u8 protocol, int err);
1568int xfrm6_protocol_register(struct xfrm6_protocol *handler, unsigned char protocol);
1569int xfrm6_protocol_deregister(struct xfrm6_protocol *handler, unsigned char protocol);
1555int xfrm6_tunnel_register(struct xfrm6_tunnel *handler, unsigned short family); 1570int xfrm6_tunnel_register(struct xfrm6_tunnel *handler, unsigned short family);
1556int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler, unsigned short family); 1571int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler, unsigned short family);
1557__be32 xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr); 1572__be32 xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr);