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);
 
 /* 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? */
        .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,
 
        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)
 {
        .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,