From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ahmed Abdelsalam Subject: [net-next] ipv6: sr: export some functions of seg6local Date: Fri, 29 Dec 2017 22:09:44 +0100 Message-ID: <1514581784-1527-1-git-send-email-amsalam20@gmail.com> Cc: david.lebrun@uclouvain.be, netdev@vger.kernel.org, amsalam20@gmail.com To: davem@davemloft.net, kuznet@ms2.inr.ac.ru, yoshfuji@linux-ipv6.org Return-path: Received: from mail-wm0-f68.google.com ([74.125.82.68]:45715 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750968AbeABRLZ (ORCPT ); Tue, 2 Jan 2018 12:11:25 -0500 Received: by mail-wm0-f68.google.com with SMTP id 9so62211472wme.4 for ; Tue, 02 Jan 2018 09:11:25 -0800 (PST) Sender: netdev-owner@vger.kernel.org List-ID: Some functions of seg6local are very useful to process SRv6 encapsulated packets. This patch exports some functions of seg6local that are useful and can be re-used at different parts of the kernel. The set of exported functions are: (1) get_srh() (2) advance_nextseg() (3) lookup_nexthop Signed-off-by: Ahmed Abdelsalam --- I'm writing some extensions to netfilter framework to support Segment Routing. These function are useful to process SR-encapsulated packets include/net/seg6.h | 4 ++++ net/ipv6/seg6_local.c | 11 +++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/net/seg6.h b/include/net/seg6.h index 099bad5..4058f23 100644 --- a/include/net/seg6.h +++ b/include/net/seg6.h @@ -60,6 +60,10 @@ extern int seg6_local_init(void); extern void seg6_local_exit(void); extern bool seg6_validate_srh(struct ipv6_sr_hdr *srh, int len); +extern struct ipv6_sr_hdr *get_srh(struct sk_buff *skb); +extern void advance_nextseg(struct ipv6_sr_hdr *srh, struct in6_addr *daddr); +extern void lookup_nexthop(struct sk_buff *skb, struct in6_addr *nhaddr, + u32 tbl_id); extern int seg6_do_srh_encap(struct sk_buff *skb, struct ipv6_sr_hdr *osrh, int proto); extern int seg6_do_srh_inline(struct sk_buff *skb, struct ipv6_sr_hdr *osrh); diff --git a/net/ipv6/seg6_local.c b/net/ipv6/seg6_local.c index 825b8e0..5661d6c 100644 --- a/net/ipv6/seg6_local.c +++ b/net/ipv6/seg6_local.c @@ -59,7 +59,7 @@ static struct seg6_local_lwt *seg6_local_lwtunnel(struct lwtunnel_state *lwt) return (struct seg6_local_lwt *)lwt->data; } -static struct ipv6_sr_hdr *get_srh(struct sk_buff *skb) +struct ipv6_sr_hdr *get_srh(struct sk_buff *skb) { struct ipv6_sr_hdr *srh; int len, srhoff = 0; @@ -82,6 +82,7 @@ static struct ipv6_sr_hdr *get_srh(struct sk_buff *skb) return srh; } +EXPORT_SYMBOL_GPL(get_srh); static struct ipv6_sr_hdr *get_and_validate_srh(struct sk_buff *skb) { @@ -131,7 +132,7 @@ static bool decap_and_validate(struct sk_buff *skb, int proto) return true; } -static void advance_nextseg(struct ipv6_sr_hdr *srh, struct in6_addr *daddr) +void advance_nextseg(struct ipv6_sr_hdr *srh, struct in6_addr *daddr) { struct in6_addr *addr; @@ -139,9 +140,10 @@ static void advance_nextseg(struct ipv6_sr_hdr *srh, struct in6_addr *daddr) addr = srh->segments + srh->segments_left; *daddr = *addr; } +EXPORT_SYMBOL_GPL(advance_nextseg); -static void lookup_nexthop(struct sk_buff *skb, struct in6_addr *nhaddr, - u32 tbl_id) +void lookup_nexthop(struct sk_buff *skb, struct in6_addr *nhaddr, + u32 tbl_id) { struct net *net = dev_net(skb->dev); struct ipv6hdr *hdr = ipv6_hdr(skb); @@ -188,6 +190,7 @@ static void lookup_nexthop(struct sk_buff *skb, struct in6_addr *nhaddr, skb_dst_drop(skb); skb_dst_set(skb, dst); } +EXPORT_SYMBOL_GPL(lookup_nexthop); /* regular endpoint function */ static int input_action_end(struct sk_buff *skb, struct seg6_local_lwt *slwt) -- 2.1.4