|
@@ -274,6 +274,8 @@ struct xfrm_state_afinfo {
|
|
struct sk_buff *skb);
|
|
struct sk_buff *skb);
|
|
int (*extract_output)(struct xfrm_state *x,
|
|
int (*extract_output)(struct xfrm_state *x,
|
|
struct sk_buff *skb);
|
|
struct sk_buff *skb);
|
|
|
|
+ int (*transport_finish)(struct sk_buff *skb,
|
|
|
|
+ int async);
|
|
};
|
|
};
|
|
|
|
|
|
extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
|
|
extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
|
|
@@ -522,6 +524,22 @@ struct xfrm_mode_skb_cb {
|
|
|
|
|
|
#define XFRM_MODE_SKB_CB(__skb) ((struct xfrm_mode_skb_cb *)&((__skb)->cb[0]))
|
|
#define XFRM_MODE_SKB_CB(__skb) ((struct xfrm_mode_skb_cb *)&((__skb)->cb[0]))
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * This structure is used by the input processing to locate the SPI and
|
|
|
|
+ * related information.
|
|
|
|
+ */
|
|
|
|
+struct xfrm_spi_skb_cb {
|
|
|
|
+ union {
|
|
|
|
+ struct inet_skb_parm h4;
|
|
|
|
+ struct inet6_skb_parm h6;
|
|
|
|
+ } header;
|
|
|
|
+
|
|
|
|
+ unsigned int nhoff;
|
|
|
|
+ unsigned int daddroff;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+#define XFRM_SPI_SKB_CB(__skb) ((struct xfrm_spi_skb_cb *)&((__skb)->cb[0]))
|
|
|
|
+
|
|
/* Audit Information */
|
|
/* Audit Information */
|
|
struct xfrm_audit
|
|
struct xfrm_audit
|
|
{
|
|
{
|
|
@@ -1119,12 +1137,15 @@ extern void xfrm_replay_notify(struct xfrm_state *x, int event);
|
|
extern int xfrm_state_mtu(struct xfrm_state *x, int mtu);
|
|
extern int xfrm_state_mtu(struct xfrm_state *x, int mtu);
|
|
extern int xfrm_init_state(struct xfrm_state *x);
|
|
extern int xfrm_init_state(struct xfrm_state *x);
|
|
extern int xfrm_prepare_input(struct xfrm_state *x, struct sk_buff *skb);
|
|
extern int xfrm_prepare_input(struct xfrm_state *x, struct sk_buff *skb);
|
|
|
|
+extern int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi,
|
|
|
|
+ int encap_type);
|
|
extern int xfrm_output_resume(struct sk_buff *skb, int err);
|
|
extern int xfrm_output_resume(struct sk_buff *skb, int err);
|
|
extern int xfrm_output(struct sk_buff *skb);
|
|
extern int xfrm_output(struct sk_buff *skb);
|
|
extern int xfrm4_extract_header(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_extract_input(struct xfrm_state *x, struct sk_buff *skb);
|
|
extern int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
|
|
extern int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
|
|
int encap_type);
|
|
int encap_type);
|
|
|
|
+extern int xfrm4_transport_finish(struct sk_buff *skb, int async);
|
|
extern int xfrm4_rcv(struct sk_buff *skb);
|
|
extern int xfrm4_rcv(struct sk_buff *skb);
|
|
|
|
|
|
static inline int xfrm4_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi)
|
|
static inline int xfrm4_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi)
|
|
@@ -1140,6 +1161,7 @@ extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short f
|
|
extern int xfrm6_extract_header(struct sk_buff *skb);
|
|
extern int xfrm6_extract_header(struct sk_buff *skb);
|
|
extern int xfrm6_extract_input(struct xfrm_state *x, struct sk_buff *skb);
|
|
extern int xfrm6_extract_input(struct xfrm_state *x, struct sk_buff *skb);
|
|
extern int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi);
|
|
extern int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi);
|
|
|
|
+extern int xfrm6_transport_finish(struct sk_buff *skb, int async);
|
|
extern int xfrm6_rcv(struct sk_buff *skb);
|
|
extern int xfrm6_rcv(struct sk_buff *skb);
|
|
extern int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
|
|
extern int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
|
|
xfrm_address_t *saddr, u8 proto);
|
|
xfrm_address_t *saddr, u8 proto);
|