Loading include/net/xfrm.h +23 −0 Original line number Original line Diff line number Diff line Loading @@ -204,6 +204,7 @@ struct xfrm_state * transformer. */ * transformer. */ const struct xfrm_type *type; const struct xfrm_type *type; struct xfrm_mode *inner_mode; struct xfrm_mode *inner_mode; struct xfrm_mode *inner_mode_iaf; struct xfrm_mode *outer_mode; struct xfrm_mode *outer_mode; /* Security context */ /* Security context */ Loading Loading @@ -387,6 +388,27 @@ enum { extern int xfrm_register_mode(struct xfrm_mode *mode, int family); extern int xfrm_register_mode(struct xfrm_mode *mode, int family); extern int xfrm_unregister_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 struct xfrm_tmpl { { /* id in template is interpreted as: /* id in template is interpreted as: Loading Loading @@ -1253,6 +1275,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_input_resume(struct sk_buff *skb, int nexthdr); 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 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_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, Loading net/ipv4/xfrm4_mode_tunnel.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -41,7 +41,7 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) top_iph->ihl = 5; top_iph->ihl = 5; top_iph->version = 4; top_iph->version = 4; top_iph->protocol = x->inner_mode->afinfo->proto; top_iph->protocol = xfrm_af2proto(skb->dst->ops->family); /* DS disclosed */ /* DS disclosed */ top_iph->tos = INET_ECN_encapsulate(XFRM_MODE_SKB_CB(skb)->tos, top_iph->tos = INET_ECN_encapsulate(XFRM_MODE_SKB_CB(skb)->tos, Loading net/ipv4/xfrm4_output.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -56,7 +56,7 @@ int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb) { { int err; int err; err = x->inner_mode->afinfo->extract_output(x, skb); err = xfrm_inner_extract_output(x, skb); if (err) if (err) return err; return err; Loading net/ipv6/xfrm6_mode_tunnel.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -45,7 +45,7 @@ static int xfrm6_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) memcpy(top_iph->flow_lbl, XFRM_MODE_SKB_CB(skb)->flow_lbl, memcpy(top_iph->flow_lbl, XFRM_MODE_SKB_CB(skb)->flow_lbl, sizeof(top_iph->flow_lbl)); sizeof(top_iph->flow_lbl)); top_iph->nexthdr = x->inner_mode->afinfo->proto; top_iph->nexthdr = xfrm_af2proto(skb->dst->ops->family); dsfield = XFRM_MODE_SKB_CB(skb)->tos; dsfield = XFRM_MODE_SKB_CB(skb)->tos; dsfield = INET_ECN_encapsulate(dsfield, dsfield); dsfield = INET_ECN_encapsulate(dsfield, dsfield); Loading net/ipv6/xfrm6_output.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,7 @@ int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb) { { int err; int err; err = x->inner_mode->afinfo->extract_output(x, skb); err = xfrm_inner_extract_output(x, skb); if (err) if (err) return err; return err; Loading Loading
include/net/xfrm.h +23 −0 Original line number Original line Diff line number Diff line Loading @@ -204,6 +204,7 @@ struct xfrm_state * transformer. */ * transformer. */ const struct xfrm_type *type; const struct xfrm_type *type; struct xfrm_mode *inner_mode; struct xfrm_mode *inner_mode; struct xfrm_mode *inner_mode_iaf; struct xfrm_mode *outer_mode; struct xfrm_mode *outer_mode; /* Security context */ /* Security context */ Loading Loading @@ -387,6 +388,27 @@ enum { extern int xfrm_register_mode(struct xfrm_mode *mode, int family); extern int xfrm_register_mode(struct xfrm_mode *mode, int family); extern int xfrm_unregister_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 struct xfrm_tmpl { { /* id in template is interpreted as: /* id in template is interpreted as: Loading Loading @@ -1253,6 +1275,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_input_resume(struct sk_buff *skb, int nexthdr); 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 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_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, Loading
net/ipv4/xfrm4_mode_tunnel.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -41,7 +41,7 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) top_iph->ihl = 5; top_iph->ihl = 5; top_iph->version = 4; top_iph->version = 4; top_iph->protocol = x->inner_mode->afinfo->proto; top_iph->protocol = xfrm_af2proto(skb->dst->ops->family); /* DS disclosed */ /* DS disclosed */ top_iph->tos = INET_ECN_encapsulate(XFRM_MODE_SKB_CB(skb)->tos, top_iph->tos = INET_ECN_encapsulate(XFRM_MODE_SKB_CB(skb)->tos, Loading
net/ipv4/xfrm4_output.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -56,7 +56,7 @@ int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb) { { int err; int err; err = x->inner_mode->afinfo->extract_output(x, skb); err = xfrm_inner_extract_output(x, skb); if (err) if (err) return err; return err; Loading
net/ipv6/xfrm6_mode_tunnel.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -45,7 +45,7 @@ static int xfrm6_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) memcpy(top_iph->flow_lbl, XFRM_MODE_SKB_CB(skb)->flow_lbl, memcpy(top_iph->flow_lbl, XFRM_MODE_SKB_CB(skb)->flow_lbl, sizeof(top_iph->flow_lbl)); sizeof(top_iph->flow_lbl)); top_iph->nexthdr = x->inner_mode->afinfo->proto; top_iph->nexthdr = xfrm_af2proto(skb->dst->ops->family); dsfield = XFRM_MODE_SKB_CB(skb)->tos; dsfield = XFRM_MODE_SKB_CB(skb)->tos; dsfield = INET_ECN_encapsulate(dsfield, dsfield); dsfield = INET_ECN_encapsulate(dsfield, dsfield); Loading
net/ipv6/xfrm6_output.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,7 @@ int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb) { { int err; int err; err = x->inner_mode->afinfo->extract_output(x, skb); err = xfrm_inner_extract_output(x, skb); if (err) if (err) return err; return err; Loading