]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
types: add ethernet address type
authorPatrick McHardy <kaber@trash.net>
Mon, 15 Apr 2013 14:16:04 +0000 (16:16 +0200)
committerPatrick McHardy <kaber@trash.net>
Thu, 18 Apr 2013 13:28:13 +0000 (15:28 +0200)
Add a new type for ethernet addresses. This is needed since for concatenations
we need fixed sized data types, the generic link layer address doesn't have
a fixed length.

Signed-off-by: Patrick McHardy <kaber@trash.net>
include/datatype.h
src/datatype.c
src/payload.c

index aa270c0ed795bafe77abdcf2a00a89e5f12bb38b..538899349c68d6508d740ebab0dfadeeb8df4252 100644 (file)
@@ -12,6 +12,7 @@
  * @TYPE_LLADDR:       link layer address (integer subtype)
  * @TYPE_IPADDR:       IPv4 address (integer subtype)
  * @TYPE_IP6ADDR:      IPv6 address (integer subtype)
+ * @TYPE_ETHERADDR:    Ethernet address (lladdr subtype)
  * @TYPE_ETHERTYPE:    EtherType (integer subtype)
  * @TYPE_ARPOP:                ARP operation (integer subtype)
  * @TYPE_INET_PROTOCOL:        internet protocol (integer subtype)
@@ -41,6 +42,7 @@ enum datatypes {
        TYPE_LLADDR,
        TYPE_IPADDR,
        TYPE_IP6ADDR,
+       TYPE_ETHERADDR,
        TYPE_ETHERTYPE,
        TYPE_ARPOP,
        TYPE_INET_PROTOCOL,
@@ -158,6 +160,7 @@ extern const struct datatype string_type;
 extern const struct datatype lladdr_type;
 extern const struct datatype ipaddr_type;
 extern const struct datatype ip6addr_type;
+extern const struct datatype etheraddr_type;
 extern const struct datatype ethertype_type;
 extern const struct datatype arphrd_type;
 extern const struct datatype inet_protocol_type;
index c687edd478a72fe5b2116b4b83b3dd2a426d7182..e87de41861784f1b89870ee5ada010f8bee51519 100644 (file)
@@ -30,6 +30,7 @@ static const struct datatype *datatypes[TYPE_MAX + 1] = {
        [TYPE_LLADDR]           = &lladdr_type,
        [TYPE_IPADDR]           = &ipaddr_type,
        [TYPE_IP6ADDR]          = &ip6addr_type,
+       [TYPE_ETHERADDR]        = &etheraddr_type,
        [TYPE_ETHERTYPE]        = &ethertype_type,
        [TYPE_INET_PROTOCOL]    = &inet_protocol_type,
        [TYPE_INET_SERVICE]     = &inet_service_type,
index 611697ec064fd76d94e0316a4d60894943e980dc..bcbc0d4352784e4a7b66db553d08e12c5ac43b24 100644 (file)
@@ -911,6 +911,15 @@ const struct payload_desc payload_vlan = {
  * Ethernet
  */
 
+const struct datatype etheraddr_type = {
+       .type           = TYPE_ETHERADDR,
+       .name           = "etheraddr",
+       .desc           = "Ethernet address",
+       .byteorder      = BYTEORDER_HOST_ENDIAN,
+       .size           = ETH_ALEN * BITS_PER_BYTE,
+       .basetype       = &lladdr_type,
+};
+
 static const struct symbol_table ethertype_tbl = {
        .symbols        = {
                SYMBOL("ip",            ETH_P_IP),
@@ -936,7 +945,7 @@ const struct datatype ethertype_type = {
 #define ETHHDR_TYPE(__name, __member) \
        ETHHDR_TEMPLATE(__name, &ethertype_type, __member)
 #define ETHHDR_ADDR(__name, __member) \
-       ETHHDR_TEMPLATE(__name, &lladdr_type, __member)
+       ETHHDR_TEMPLATE(__name, &etheraddr_type, __member)
 
 const struct payload_desc payload_eth = {
        .name           = "eth",