sctp: add skb_sdif in struct sctp_af
authorXin Long <lucien.xin@gmail.com>
Wed, 16 Nov 2022 20:01:19 +0000 (15:01 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Nov 2022 11:42:54 +0000 (11:42 +0000)
Add skb_sdif function in struct sctp_af to get the enslaved device
for both ipv4 and ipv6 when adding SCTP VRF support in sctp_rcv in
the next patch.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sctp/structs.h
net/sctp/ipv6.c
net/sctp/protocol.c

index 350f250..7b4884c 100644 (file)
@@ -477,6 +477,7 @@ struct sctp_af {
        int             (*available)    (union sctp_addr *,
                                         struct sctp_sock *);
        int             (*skb_iif)      (const struct sk_buff *sk);
+       int             (*skb_sdif)(const struct sk_buff *sk);
        int             (*is_ce)        (const struct sk_buff *sk);
        void            (*seq_dump_addr)(struct seq_file *seq,
                                         union sctp_addr *addr);
index e6274cd..097bd60 100644 (file)
@@ -842,7 +842,12 @@ static int sctp_v6_addr_to_user(struct sctp_sock *sp, union sctp_addr *addr)
 /* Where did this skb come from?  */
 static int sctp_v6_skb_iif(const struct sk_buff *skb)
 {
-       return IP6CB(skb)->iif;
+       return inet6_iif(skb);
+}
+
+static int sctp_v6_skb_sdif(const struct sk_buff *skb)
+{
+       return inet6_sdif(skb);
 }
 
 /* Was this packet marked by Explicit Congestion Notification? */
@@ -1142,6 +1147,7 @@ static struct sctp_af sctp_af_inet6 = {
        .is_any            = sctp_v6_is_any,
        .available         = sctp_v6_available,
        .skb_iif           = sctp_v6_skb_iif,
+       .skb_sdif          = sctp_v6_skb_sdif,
        .is_ce             = sctp_v6_is_ce,
        .seq_dump_addr     = sctp_v6_seq_dump_addr,
        .ecn_capable       = sctp_v6_ecn_capable,
index dbfe7d1..a18cf04 100644 (file)
@@ -567,6 +567,11 @@ static int sctp_v4_skb_iif(const struct sk_buff *skb)
        return inet_iif(skb);
 }
 
+static int sctp_v4_skb_sdif(const struct sk_buff *skb)
+{
+       return inet_sdif(skb);
+}
+
 /* Was this packet marked by Explicit Congestion Notification? */
 static int sctp_v4_is_ce(const struct sk_buff *skb)
 {
@@ -1185,6 +1190,7 @@ static struct sctp_af sctp_af_inet = {
        .available         = sctp_v4_available,
        .scope             = sctp_v4_scope,
        .skb_iif           = sctp_v4_skb_iif,
+       .skb_sdif          = sctp_v4_skb_sdif,
        .is_ce             = sctp_v4_is_ce,
        .seq_dump_addr     = sctp_v4_seq_dump_addr,
        .ecn_capable       = sctp_v4_ecn_capable,