if (info->invflags & EBT_IP_PROTO)
                        return -EINVAL;
                if (info->protocol != IPPROTO_TCP &&
-                   info->protocol != IPPROTO_UDP)
+                   info->protocol != IPPROTO_UDP &&
+                   info->protocol != IPPROTO_SCTP &&
+                   info->protocol != IPPROTO_DCCP)
                         return -EINVAL;
        }
        if (info->bitmask & EBT_IP_DPORT && info->dport[0] > info->dport[1])
 
                       "tos=0x%02X, IP proto=%d", NIPQUAD(ih->saddr),
                       NIPQUAD(ih->daddr), ih->tos, ih->protocol);
                if (ih->protocol == IPPROTO_TCP ||
-                   ih->protocol == IPPROTO_UDP) {
+                   ih->protocol == IPPROTO_UDP ||
+                   ih->protocol == IPPROTO_SCTP ||
+                   ih->protocol == IPPROTO_DCCP) {
                        struct tcpudphdr _ports, *pptr;
 
                        pptr = skb_header_pointer(skb, ih->ihl*4,