Permalink
Browse files

SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>

  • Loading branch information...
1 parent e1de194 commit 283da6d7263326b4ca92c9fb7905524bb106f8a9 fenner committed May 10, 2001
Showing with 82 additions and 31 deletions.
  1. +1 −0 CREDITS
  2. +49 −2 gencode.c
  3. +27 −26 gencode.h
  4. +3 −2 grammar.y
  5. +2 −1 scanner.l
View
1 CREDITS
@@ -13,6 +13,7 @@ The current maintainers:
Additional people who have contributed patches:
Arkadiusz Miskiewicz <misiek@pld.org.pl>
+ Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
Fulvio Risso <risso@polito.it>
Charles M. Hannum <mycroft@netbsd.org>
Chris G. Demetriou <cgd@netbsd.org>
View
51 gencode.c
@@ -21,7 +21,7 @@
*/
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.151 2001-04-17 08:25:21 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.152 2001-05-10 14:48:01 fenner Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -64,6 +64,10 @@ struct rtentry;
#define ETHERMTU 1500
+#ifndef IPPROTO_SCTP
+#define IPPROTO_SCTP 132
+#endif
+
#ifdef HAVE_OS_PROTO_H
#include "os-proto.h"
#endif
@@ -1734,6 +1738,9 @@ gen_host(addr, mask, proto, dir)
case Q_TCP:
bpf_error("'tcp' modifier applied to host");
+ case Q_SCTP:
+ bpf_error("'sctp' modifier applied to host");
+
case Q_UDP:
bpf_error("'udp' modifier applied to host");
@@ -1836,6 +1843,9 @@ gen_host6(addr, mask, proto, dir)
case Q_ARP:
bpf_error("'arp' modifier applied to ip6 host");
+ case Q_SCTP:
+ bpf_error("'sctp' modifier applied to host");
+
case Q_TCP:
bpf_error("'tcp' modifier applied to host");
@@ -1973,6 +1983,14 @@ gen_proto_abbrev(proto)
switch (proto) {
+ case Q_SCTP:
+ b1 = gen_proto(IPPROTO_SCTP, Q_IP, Q_DEFAULT);
+#ifdef INET6
+ b0 = gen_proto(IPPROTO_SCTP, Q_IPV6, Q_DEFAULT);
+ gen_or(b0, b1);
+#endif
+ break;
+
case Q_TCP:
b1 = gen_proto(IPPROTO_TCP, Q_IP, Q_DEFAULT);
#ifdef INET6
@@ -2243,13 +2261,16 @@ gen_port(port, ip_proto, dir)
switch (ip_proto) {
case IPPROTO_UDP:
case IPPROTO_TCP:
+ case IPPROTO_SCTP:
b1 = gen_portop(port, ip_proto, dir);
break;
case PROTO_UNDEF:
tmp = gen_portop(port, IPPROTO_TCP, dir);
b1 = gen_portop(port, IPPROTO_UDP, dir);
gen_or(tmp, b1);
+ tmp = gen_portop(port, IPPROTO_SCTP, dir);
+ gen_or(tmp, b1);
break;
default:
@@ -2313,13 +2334,16 @@ gen_port6(port, ip_proto, dir)
switch (ip_proto) {
case IPPROTO_UDP:
case IPPROTO_TCP:
+ case IPPROTO_SCTP:
b1 = gen_portop6(port, ip_proto, dir);
break;
case PROTO_UNDEF:
tmp = gen_portop6(port, IPPROTO_TCP, dir);
b1 = gen_portop6(port, IPPROTO_UDP, dir);
gen_or(tmp, b1);
+ tmp = gen_portop6(port, IPPROTO_SCTP, dir);
+ gen_or(tmp, b1);
break;
default:
@@ -2753,6 +2777,10 @@ gen_proto(v, proto, dir)
bpf_error("'tcp proto' is bogus");
/* NOTREACHED */
+ case Q_SCTP:
+ bpf_error("'sctp proto' is bogus");
+ /* NOTREACHED */
+
case Q_ICMP:
bpf_error("'icmp proto' is bogus");
/* NOTREACHED */
@@ -2950,24 +2978,40 @@ gen_scode(name, q)
}
case Q_PORT:
- if (proto != Q_DEFAULT && proto != Q_UDP && proto != Q_TCP)
+ if (proto != Q_DEFAULT &&
+ proto != Q_UDP && proto != Q_TCP && proto != Q_SCTP)
bpf_error("illegal qualifier of 'port'");
if (pcap_nametoport(name, &port, &real_proto) == 0)
bpf_error("unknown port '%s'", name);
if (proto == Q_UDP) {
if (real_proto == IPPROTO_TCP)
bpf_error("port '%s' is tcp", name);
+ else if (real_proto == IPPROTO_SCTP)
+ bpf_error("port '%s' is sctp", name);
else
/* override PROTO_UNDEF */
real_proto = IPPROTO_UDP;
}
if (proto == Q_TCP) {
if (real_proto == IPPROTO_UDP)
bpf_error("port '%s' is udp", name);
+
+ else if (real_proto == IPPROTO_SCTP)
+ bpf_error("port '%s' is sctp", name);
else
/* override PROTO_UNDEF */
real_proto = IPPROTO_TCP;
}
+ if (proto == Q_SCTP) {
+ if (real_proto == IPPROTO_UDP)
+ bpf_error("port '%s' is udp", name);
+
+ else if (real_proto == IPPROTO_TCP)
+ bpf_error("port '%s' is tcp", name);
+ else
+ /* override PROTO_UNDEF */
+ real_proto = IPPROTO_SCTP;
+ }
#ifndef INET6
return gen_port(port, real_proto, dir);
#else
@@ -3105,6 +3149,8 @@ gen_ncode(s, v, q)
proto = IPPROTO_UDP;
else if (proto == Q_TCP)
proto = IPPROTO_TCP;
+ else if (proto == Q_SCTP)
+ proto = IPPROTO_SCTP;
else if (proto == Q_DEFAULT)
proto = PROTO_UNDEF;
else
@@ -3317,6 +3363,7 @@ gen_load(proto, index, size)
index->b = b;
break;
+ case Q_SCTP:
case Q_TCP:
case Q_UDP:
case Q_ICMP:
View
53 gencode.h
@@ -18,7 +18,7 @@
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.52 2001-04-17 08:25:22 guy Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.53 2001-05-10 14:48:02 fenner Exp $ (LBL)
*/
/* Address qualifiers. */
@@ -36,41 +36,42 @@
#define Q_IP 2
#define Q_ARP 3
#define Q_RARP 4
-#define Q_TCP 5
-#define Q_UDP 6
-#define Q_ICMP 7
-#define Q_IGMP 8
-#define Q_IGRP 9
+#define Q_SCTP 5
+#define Q_TCP 6
+#define Q_UDP 7
+#define Q_ICMP 8
+#define Q_IGMP 9
+#define Q_IGRP 10
-#define Q_ATALK 10
-#define Q_DECNET 11
-#define Q_LAT 12
-#define Q_SCA 13
-#define Q_MOPRC 14
-#define Q_MOPDL 15
+#define Q_ATALK 11
+#define Q_DECNET 12
+#define Q_LAT 13
+#define Q_SCA 14
+#define Q_MOPRC 15
+#define Q_MOPDL 16
-#define Q_IPV6 16
-#define Q_ICMPV6 17
-#define Q_AH 18
-#define Q_ESP 19
+#define Q_IPV6 17
+#define Q_ICMPV6 18
+#define Q_AH 19
+#define Q_ESP 20
-#define Q_PIM 20
-#define Q_VRRP 21
+#define Q_PIM 21
+#define Q_VRRP 22
-#define Q_AARP 22
+#define Q_AARP 23
-#define Q_ISO 23
-#define Q_ESIS 24
-#define Q_ISIS 25
-#define Q_CLNP 26
+#define Q_ISO 24
+#define Q_ESIS 25
+#define Q_ISIS 26
+#define Q_CLNP 27
-#define Q_STP 27
+#define Q_STP 28
-#define Q_IPX 28
+#define Q_IPX 29
-#define Q_NETBEUI 29
+#define Q_NETBEUI 30
/* Directional qualifiers. */
View
5 grammar.y
@@ -22,7 +22,7 @@
*/
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.69 2001-04-17 08:25:23 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.70 2001-05-10 14:48:03 fenner Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -106,7 +106,7 @@ pcap_parse()
%token DST SRC HOST GATEWAY
%token NET MASK PORT LESS GREATER PROTO PROTOCHAIN BYTE
-%token ARP RARP IP TCP UDP ICMP IGMP IGRP PIM VRRP
+%token ARP RARP IP SCTP TCP UDP ICMP IGMP IGRP PIM VRRP
%token ATALK AARP DECNET LAT SCA MOPRC MOPDL
%token TK_BROADCAST TK_MULTICAST
%token NUM INBOUND OUTBOUND
@@ -247,6 +247,7 @@ pname: LINK { $$ = Q_LINK; }
| IP { $$ = Q_IP; }
| ARP { $$ = Q_ARP; }
| RARP { $$ = Q_RARP; }
+ | SCTP { $$ = Q_SCTP; }
| TCP { $$ = Q_TCP; }
| UDP { $$ = Q_UDP; }
| ICMP { $$ = Q_ICMP; }
View
3 scanner.l
@@ -22,7 +22,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.76 2001-04-17 08:25:23 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.77 2001-05-10 14:48:03 fenner Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -170,6 +170,7 @@ fddi|tr return LINK;
arp return ARP;
rarp return RARP;
ip return IP;
+sctp return SCTP;
tcp return TCP;
udp return UDP;
icmp return ICMP;

0 comments on commit 283da6d

Please sign in to comment.