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') ] }) ] },)