use getethertype.c
authorBart De Schuymer <bdschuym@pandora.be>
Wed, 20 Nov 2002 19:41:54 +0000 (19:41 +0000)
committerBart De Schuymer <bdschuym@pandora.be>
Wed, 20 Nov 2002 19:41:54 +0000 (19:41 +0000)
extensions/ebt_arp.c
extensions/ebt_vlan.c

index da3d9d6..b517068 100644 (file)
@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <getopt.h>
 #include "../include/ebtables_u.h"
+#include "../include/ethernetdb.h"
 #include <linux/netfilter_bridge/ebt_arp.h>
 
 #define ARP_OPCODE '1'
@@ -133,9 +134,14 @@ static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry,
                        print_error("Missing ARP protocol type argument");
                i = strtol(argv[optind - 1], &end, 16);
                if (i < 0 || i >= (0x1 << 16) || *end !='\0') {
-                       if (name_to_number (argv[optind - 1], &proto) == -1)
+                       struct ethertypeent *ent;
+
+                       ent = getethertypebyname(argv[optind - 1]);
+                       if (!ent)
                                print_error("Problem with specified ARP "
                                            "protocol type");
+                       proto = ent->e_ethertype;
+
                } else
                        proto = i;
                arpinfo->ptype = htons(proto);
@@ -190,7 +196,6 @@ static void print(const struct ebt_u_entry *entry,
 {
        struct ebt_arp_info *arpinfo = (struct ebt_arp_info *)match->data;
        int i;
-       char name[21];
 
        if (arpinfo->bitmask & EBT_ARP_OPCODE) {
                int opcode = ntohs(arpinfo->opcode);
@@ -209,13 +214,16 @@ static void print(const struct ebt_u_entry *entry,
                printf("%d ", ntohs(arpinfo->htype));
        }
        if (arpinfo->bitmask & EBT_ARP_PTYPE) {
+               struct ethertypeent *ent;
+
                printf("--arp-ptype ");
                if (arpinfo->invflags & EBT_ARP_PTYPE)
                        printf("! ");
-               if (number_to_name(ntohs(arpinfo->ptype), name))
+               ent = getethertypebynumber(ntohs(arpinfo->ptype));
+               if (!ent)
                        printf("0x%x ", ntohs(arpinfo->ptype));
                else
-                       printf("%s ", name);
+                       printf("%s ", ent->e_name);
        }
        if (arpinfo->bitmask & EBT_ARP_SRC_IP) {
                printf("--arp-ip-src ");
index 297b61b..ab2ce09 100644 (file)
@@ -35,6 +35,7 @@
 #include <string.h>
 #include <getopt.h>
 #include "../include/ebtables_u.h"
+#include "../include/ethernetdb.h"
 #include <linux/netfilter_bridge/ebt_vlan.h>
 
 #define GET_BITMASK(_MASK_) vlaninfo->bitmask & _MASK_
@@ -189,17 +190,22 @@ parse (int c,
                if (*end == '\0' && (encap < ETH_ZLEN || encap > 0xFFFF))
                        print_error
                            ("Specified encapsulated frame type is out of range");
-               if (*end != '\0')
-                       if (name_to_number (argv[optind - 1], &encap) == -1)
+               if (*end != '\0') {
+                       struct ethertypeent *ent;
+
+                       ent = getethertypebyname(argv[optind - 1]);
+                       if (!ent)
                                print_error
                                    ("Problem with the specified encapsulated"
                                     "protocol");
+                       encap = ent->e_ethertype;
+               }
                /*
                 * Set up parameter value (network notation)
                 */
                vlaninfo->encap = htons (encap);
                /*
-                * Set up parameter presence flag 
+                * Set up parameter presence flag
                 */
                SET_BITMASK (EBT_VLAN_ENCAP);
                break;
@@ -258,7 +264,6 @@ print (const struct ebt_u_entry *entry,
        struct ebt_vlan_info *vlaninfo =
            (struct ebt_vlan_info *) match->data;
 
-       char ethertype_name[21];
        /*
         * Print VLAN ID if they are specified 
         */
@@ -279,15 +284,15 @@ print (const struct ebt_u_entry *entry,
         * Print encapsulated frame type if they are specified 
         */
        if (GET_BITMASK (EBT_VLAN_ENCAP)) {
+               struct ethertypeent *ent;
+
                printf ("--%s %s",
                        opts[VLAN_ENCAP].name, INV_FLAG (EBT_VLAN_ENCAP));
-               bzero (ethertype_name, 21);
-               if (!number_to_name
-                   (ntohs (vlaninfo->encap), ethertype_name)) {
-                       printf ("%s ", ethertype_name);
-               } else {
+               ent = getethertypebynumber(ntohs(vlaninfo->encap));
+               if (!ent)
                        printf ("%2.4X ", ntohs (vlaninfo->encap));
-               }
+               else
+                       printf ("%s ", ent->e_name);
        }
 }