From 750f6aad7b4a7b2e2523c64cb3074ef4a1817f0d Mon Sep 17 00:00:00 2001 From: Alexander Langer Date: Fri, 8 Aug 1997 14:36:29 +0000 Subject: [PATCH] Support interface names up to 15 characters in length. In order to accommodate the expanded name, the ICMP types bitmap has been reduced from 256 bits to 32. A recompile of kernel and user level ipfw is required. To be merged into 2.2 after a brief period in -current. PR: bin/4209 Reviewed by: Archie Cobbs --- sbin/ipfw/ipfw.c | 8 ++++---- sys/netinet/ip_fw.h | 8 +++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/sbin/ipfw/ipfw.c b/sbin/ipfw/ipfw.c index 802e5c6d38d..fb4f577b877 100644 --- a/sbin/ipfw/ipfw.c +++ b/sbin/ipfw/ipfw.c @@ -16,7 +16,7 @@ * * NEW command line interface for IP firewall facility * - * $Id: ipfw.c,v 1.45 1997/06/23 22:32:13 julian Exp $ + * $Id: ipfw.c,v 1.46 1997/07/25 03:13:46 brian Exp $ * */ @@ -384,7 +384,7 @@ show_ipfw(struct ip_fw *chain) printf(" icmptype"); - for (type_index = 0; type_index < 256; ++type_index) + for (type_index = 0; type_index < IP_FW_ICMPTYPES_DIM * sizeof(unsigned) * 8; ++type_index) if (chain->fw_icmptypes[type_index / (sizeof(unsigned) * 8)] & (1U << (type_index % (sizeof(unsigned) * 8)))) { printf("%c%d", first == 1 ? ' ' : ',', type_index); @@ -697,8 +697,8 @@ fill_icmptypes(types, vp, fw_flg) if ( *c != ',' && *c != '\0' ) show_usage("invalid ICMP type"); - if (icmptype > 255) - show_usage("ICMP types are between 0 and 255 inclusive"); + if (icmptype >= IP_FW_ICMPTYPES_DIM * sizeof(unsigned) * 8) + show_usage("ICMP type out of range"); types[icmptype / (sizeof(unsigned) * 8)] |= 1 << (icmptype % (sizeof(unsigned) * 8)); diff --git a/sys/netinet/ip_fw.h b/sys/netinet/ip_fw.h index 96d735766da..d45be58f058 100644 --- a/sys/netinet/ip_fw.h +++ b/sys/netinet/ip_fw.h @@ -11,12 +11,14 @@ * * This software is provided ``AS IS'' without any warranties of any kind. * - * $Id: ip_fw.h,v 1.1 1997/05/09 17:46:45 archie Exp $ + * $Id: ip_fw.h,v 1.27 1997/06/02 05:02:36 julian Exp $ */ #ifndef _IP_FW_H #define _IP_FW_H +#include + /* * This union structure identifies an interface, either explicitly * by name or implicitly by IP address. The flags IP_FW_F_IIFNAME @@ -33,7 +35,7 @@ union ip_fw_if { struct in_addr fu_via_ip; /* Specified by IP address */ struct { /* Specified by interface name */ -#define FW_IFNLEN 6 /* To keep structure on 2^x boundary */ +#define FW_IFNLEN IFNAMSIZ char name[FW_IFNLEN]; short unit; /* -1 means match any unit */ } fu_via_if; @@ -58,7 +60,7 @@ struct ip_fw { u_short fw_pts[IP_FW_MAX_PORTS]; /* Array of port numbers to match */ u_char fw_ipopt,fw_ipnopt; /* IP options set/unset */ u_char fw_tcpf,fw_tcpnf; /* TCP flags set/unset */ -#define IP_FW_ICMPTYPES_DIM (256 / (sizeof(unsigned) * 8)) +#define IP_FW_ICMPTYPES_DIM (32 / (sizeof(unsigned) * 8)) unsigned fw_icmptypes[IP_FW_ICMPTYPES_DIM]; /* ICMP types bitmap */ long timestamp; /* timestamp (tv_sec) of last match */ union ip_fw_if fw_in_if, fw_out_if; /* Incoming and outgoing interfaces */