]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
payload: add DCCP packet type definitions
authorPatrick McHardy <kaber@trash.net>
Tue, 28 Jul 2009 12:17:42 +0000 (14:17 +0200)
committerPatrick McHardy <kaber@trash.net>
Tue, 28 Jul 2009 12:17:42 +0000 (14:17 +0200)
# nft describe dccp type
payload expression, datatype dccp_pkttype (DCCP packet type) (basetype integer), 4 bits

pre-defined symbolic constants:
request                        0x0
response                       0x1
data                           0x2
ack                            0x3
dataack                        0x4
closereq                       0x5
close                          0x6
reset                          0x7
sync                           0x8
syncack                        0x9

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

index ea18f7190cb9649b664bdf321537169628110b69..aa270c0ed795bafe77abdcf2a00a89e5f12bb38b 100644 (file)
@@ -18,6 +18,7 @@
  * @TYPE_INET_SERVICE: internet service (integer subtype)
  * @TYPE_ICMP_TYPE:    ICMP type codes (integer subtype)
  * @TYPE_TCP_FLAG:     TCP flag (bitmask subtype)
+ * @TCPE_DCCP_PKTTYPE: DCCP packet type (integer subtype)
  * @TYPE_MH_TYPE:      Mobility Header type (integer subtype)
  * @TYPE_TIME:         relative time
  * @TYPE_MARK:         packet mark (integer subtype)
@@ -46,6 +47,7 @@ enum datatypes {
        TYPE_INET_SERVICE,
        TYPE_ICMP_TYPE,
        TYPE_TCP_FLAG,
+       TYPE_DCCP_PKTTYPE,
        TYPE_MH_TYPE,
        TYPE_TIME,
        TYPE_MARK,
index 5bbfdc49975aea30bab1d5e7ac6dfeecc8990345..469d674073088799b1048e0cdd2ea9104da46ab8 100644 (file)
@@ -39,6 +39,20 @@ struct ip_comp_hdr {
 # define IPPROTO_DCCP 33
 #endif
 
+enum dccp_pkt_type {
+       DCCP_PKT_REQUEST = 0,
+       DCCP_PKT_RESPONSE,
+       DCCP_PKT_DATA,
+       DCCP_PKT_ACK,
+       DCCP_PKT_DATAACK,
+       DCCP_PKT_CLOSEREQ,
+       DCCP_PKT_CLOSE,
+       DCCP_PKT_RESET,
+       DCCP_PKT_SYNC,
+       DCCP_PKT_SYNCACK,
+       DCCP_PKT_INVALID,
+};
+
 struct dccp_hdr {
        uint16_t        dccph_sport,
                        dccph_dport;
index 3a7150bd5d66b70e1dbb93b477f6808a2084e59f..8f5398b7ceaf8f737f7607e9bd722c961196c70e 100644 (file)
@@ -258,6 +258,7 @@ enum dccp_hdr_fields {
        DCCPHDR_INVALID,
        DCCPHDR_SPORT,
        DCCPHDR_DPORT,
+       DCCPHDR_TYPE,
 };
 
 enum sctp_hdr_fields {
index 419dcd7291763afa0999ae63a3faac99a5cb5a81..3004cb258b167f19dc74945907dd6dfe10e54628 100644 (file)
@@ -1439,6 +1439,7 @@ dccp_hdr_expr             :       DCCP    dccp_hdr_field
 
 dccp_hdr_field         :       SPORT           { $$ = DCCPHDR_SPORT; }
                        |       DPORT           { $$ = DCCPHDR_DPORT; }
+                       |       TYPE            { $$ = DCCPHDR_TYPE; }
                        ;
 
 sctp_hdr_expr          :       SCTP    sctp_hdr_field
index f41d4c17e22f4426a92a64d8be0277d78b0edd91..944fed1b6733ecb01532fa2070b168f7ed9692b8 100644 (file)
@@ -691,6 +691,33 @@ const struct payload_desc payload_tcp = {
  * DCCP
  */
 
+static const struct symbol_table dccp_pkttype_tbl = {
+       .symbols        = {
+               SYMBOL("request",       DCCP_PKT_REQUEST),
+               SYMBOL("response",      DCCP_PKT_RESPONSE),
+               SYMBOL("data",          DCCP_PKT_DATA),
+               SYMBOL("ack",           DCCP_PKT_ACK),
+               SYMBOL("dataack",       DCCP_PKT_DATAACK),
+               SYMBOL("closereq",      DCCP_PKT_CLOSEREQ),
+               SYMBOL("close",         DCCP_PKT_CLOSE),
+               SYMBOL("reset",         DCCP_PKT_RESET),
+               SYMBOL("sync",          DCCP_PKT_SYNC),
+               SYMBOL("syncack",       DCCP_PKT_SYNCACK),
+               SYMBOL_LIST_END
+       },
+};
+
+static const struct datatype dccp_pkttype_type = {
+       .type           = TYPE_DCCP_PKTTYPE,
+       .name           = "dccp_pkttype",
+       .desc           = "DCCP packet type",
+       .byteorder      = BYTEORDER_INVALID,
+       .size           = 4,
+       .basetype       = &integer_type,
+       .sym_tbl        = &dccp_pkttype_tbl,
+};
+
+
 #define DCCPHDR_FIELD(__name, __member) \
        HDR_FIELD(__name, struct dccp_hdr, __member)
 
@@ -700,6 +727,7 @@ const struct payload_desc payload_dccp = {
        .templates      = {
                [DCCPHDR_SPORT]         = INET_SERVICE("sport", struct dccp_hdr, dccph_sport),
                [DCCPHDR_DPORT]         = INET_SERVICE("dport", struct dccp_hdr, dccph_dport),
+               [DCCPHDR_TYPE]          = HDR_BITFIELD("type", &dccp_pkttype_type, 67, 4),
        },
 };
 
@@ -925,6 +953,7 @@ static void __init payload_init(void)
 {
        datatype_register(&icmp_type_type);
        datatype_register(&tcp_flag_type);
+       datatype_register(&dccp_pkttype_type);
        datatype_register(&arpop_type);
        datatype_register(&ethertype_type);
 }