pyroute2 nftables expressions
from pyroute2.common import hexload
def oifname(name: str):
return ({
'attrs': [
('NFTA_EXPR_NAME',
'meta'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_META_KEY',
7),
('NFTA_META_DREG',
0x01)
]
})
]
},
{
'attrs': [
('NFTA_EXPR_NAME',
'cmp'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_CMP_SREG',
0x01),
('NFTA_CMP_OP',
0),
('NFTA_CMP_DATA',
{
'attrs': [
('NFTA_DATA_VALUE',
name)
]
})
]
})
]
})
def iifname(name):
return ({
'attrs': [
('NFTA_EXPR_NAME',
'meta'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_META_KEY',
6),
('NFTA_META_DREG',
0x01)
]
})
]
},
{
'attrs': [
('NFTA_EXPR_NAME',
'cmp'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_CMP_SREG',
0x01),
('NFTA_CMP_OP',
0),
('NFTA_CMP_DATA',
{
'attrs': [
('NFTA_DATA_VALUE',
name)
]
})
]
})
]
},)
def counter():
return ({
'attrs': [
('NFTA_EXPR_NAME',
'counter'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_COUNTER_BYTES',
0),
('NFTA_COUNTER_PACKETS',
0)
]
})
]
},)
def masquerade():
return ({
'attrs': [
('NFTA_EXPR_NAME',
'masq'),
('NFTA_EXPR_DATA',
{
'attrs': [
]
})
]
},)
def l4proto(proto: str = 'tcp'):
match proto:
case 'tcp':
proto = b'\x06'
case 'udp':
proto = b'\x11'
case _:
proto = b'\x00'
return ({
'attrs': [
('NFTA_EXPR_NAME',
'meta'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_META_KEY',
16),
('NFTA_META_DREG',
0x01)
]
})
]
},
{
'attrs': [
('NFTA_EXPR_NAME',
'cmp'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_CMP_SREG',
0x01),
('NFTA_CMP_OP',
0),
('NFTA_CMP_DATA',
{
'attrs': [
('NFTA_DATA_VALUE',
proto)
]
})
]
})
]
},)
def accept():
return ({
'attrs': [
('NFTA_EXPR_NAME',
'immediate'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_IMMEDIATE_DREG',
0x00),
('NFTA_IMMEDIATE_DATA',
{
'attrs': [
('NFTA_DATA_VERDICT',
{
'attrs': [
('NFTA_VERDICT_CODE',
1)
]
})
]
})
]
})
]
},)
def convert_to_hex(number):
hex_string = '00:00:ff:ff:'
hex_string += format(number, '02x') + ':'
hex_string += format(number, '02x') + ':'
hex_string += '00:00:00:00:00:00:00:00'
return hex_string
def udp_dport(port=80):
return ({
'attrs': [
('NFTA_EXPR_NAME',
'match'),
('NFTA_EXPR_DATA',
{
'attrs': [
('NFTA_MATCH_NAME',
'udp'),
('NFTA_MATCH_REV',
0),
('NFTA_MATCH_INFO',
b'\x00\x00\xff\xff5\x005\x00\x00\x00\x00\x00\x00\x00\x00\x00')
]
})
]
},)
Comments