diff --git a/sys/net/if_gre.h b/sys/net/if_gre.h index a626ee7d95a7..8bed6a694419 100644 --- a/sys/net/if_gre.h +++ b/sys/net/if_gre.h @@ -104,6 +104,13 @@ struct greip { #define GRE_SP 0x1000 /* Sequence Present */ #define GRE_SS 0x0800 /* Strict Source Route */ +/* + * CISCO uses special type for GRE tunnel created as part of WCCP + * connection, while in fact those packets are just IPv4 encapsulated + * into GRE. + */ +#define WCCP_PROTOCOL_TYPE 0x883E + /* * gre_sre defines a Source route Entry. These are needed if packets * should be routed over more than one tunnel hop by hop diff --git a/sys/netinet/ip_gre.c b/sys/netinet/ip_gre.c index d87e887d283e..a986b4aa3cac 100644 --- a/sys/netinet/ip_gre.c +++ b/sys/netinet/ip_gre.c @@ -179,7 +179,8 @@ gre_input2(struct mbuf *m ,int hlen, u_char proto) switch (ntohs(gip->gi_ptype)) { /* ethertypes */ case ETHERTYPE_IP: /* shouldn't need a schednetisr(), as */ - ifq = &ipintrq; /* we are in ip_input */ + case WCCP_PROTOCOL_TYPE: /* we are in ip_input */ + ifq = &ipintrq; break; #ifdef NS case ETHERTYPE_NS: