blob: fe4b38417747291556ce5e79694a865bbbec59c7 [file] [log] [blame]
# Copyright 2018 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
include <linux/socket.h>
include <uapi/linux/netfilter_arp/arp_tables.h>
include <uapi/linux/netfilter_arp/arpt_mangle.h>
setsockopt$ARPT_SO_SET_REPLACE(fd sock_in, level const[SOL_IP], opt const[ARPT_SO_SET_REPLACE], val ptr[in, arpt_replace], len len[val])
setsockopt$ARPT_SO_SET_ADD_COUNTERS(fd sock_in, level const[SOL_IP], opt const[ARPT_SO_SET_ADD_COUNTERS], val ptr[in, arpt_counters_info], len len[val])
getsockopt$ARPT_SO_GET_INFO(fd sock_in, level const[SOL_IP], opt const[ARPT_SO_GET_INFO], val ptr[in, arpt_getinfo], len ptr[in, len[val, int32]])
getsockopt$ARPT_SO_GET_ENTRIES(fd sock_in, level const[SOL_IP], opt const[ARPT_SO_GET_ENTRIES], val ptr[in, arpt_get_entries], len ptr[in, len[val, int32]])
getsockopt$ARPT_SO_GET_REVISION_TARGET(fd sock_in, level const[SOL_IP], opt const[ARPT_SO_GET_REVISION_TARGET], val ptr[in, xt_get_revision], len ptr[in, len[val, int32]])
arpt_replace {
name string["filter", XT_TABLE_MAXNAMELEN]
valid_hooks const[ARPT_FILTER_VALID_HOOKS, int32]
num_entries const[4, int32]
size bytesize[entries, int32]
hook_in ipt_hook
hook_out ipt_hook
hook_forward ipt_hook
underflow_in ipt_hook
underflow_out ipt_hook
underflow_forward ipt_hook
num_counters const[4, int32]
counters ptr[out, array[xt_counters, 4]]
entries arpt_replace_entries
}
define ARPT_FILTER_VALID_HOOKS (1 << NF_ARP_IN) | (1 << NF_ARP_OUT) | (1 << NF_ARP_FORWARD)
arpt_replace_entries {
entries array[arpt_entry, 3]
underflow arpt_entry_underflow
} [packed, align_ptr]
arpt_entry {
matches arpt_entry_matches
target arpt_targets
} [packed, align_ptr]
arpt_entry_matches {
arp arpt_arp_or_uncond
target_offset len[parent, int16]
next_offset len[arpt_entry, int16]
comefrom const[0, int32]
counters xt_counters
# Note: matches should go here, but they seem to be unused in arp tables.
} [align_ptr]
arpt_entry_underflow {
matches arpt_entry_underflow_matches
target xt_target_t["", const[NF_ACCEPT_VERDICT, int32], 0]
} [align_ptr]
arpt_entry_underflow_matches {
arp arpt_arp_uncond
target_offset len[parent, int16]
next_offset len[arpt_entry_underflow, int16]
comefrom const[0, int32]
counters xt_counters
}
arpt_arp_or_uncond [
arp arpt_arp
uncond arpt_arp_uncond
]
type arpt_arp_uncond array[const[0, int8], ARPT_ARP_SIZE]
define ARPT_ARP_SIZE sizeof(struct arpt_arp)
arpt_arp {
src ipv4_addr
dst ipv4_addr
smsk ipv4_addr_mask
dmsk ipv4_addr_mask
src_devaddr arpt_devaddr
src_devmask arpt_devmask
tgt_devaddr arpt_devaddr
tgt_devmask arpt_devmask
arpop int16be
arpop_mask int16be
arhrd int16be
arhrd_mask int16be
arpro int16be
arpro_mask int16be
iniface devname
outiface devname
iniface_mask devname_mask
outiface_mask devname_mask
flags const[0, int8]
invflags flags[arpt_arp_invflags, int16]
}
arpt_devaddr [
empty array[const[0, int8], ARPT_DEV_ADDR_LEN_MAX]
mac mac_addr
]
arpt_devmask {
mac mac_addr_mask
} [size[ARPT_DEV_ADDR_LEN_MAX]]
arpt_arp_invflags = ARPT_INV_VIA_IN, ARPT_INV_VIA_OUT, ARPT_INV_SRCIP, ARPT_INV_TGTIP, ARPT_INV_SRCDEVADDR, ARPT_INV_TGTDEVADDR, ARPT_INV_ARPOP, ARPT_INV_ARPHRD, ARPT_INV_ARPPRO, ARPT_INV_ARPHLN
arpt_targets [
unspec xt_unspec_targets
mangle xt_target_t["mangle", arpt_mangle, 0]
] [varlen]
arpt_mangle {
src_devaddr arpt_devaddr
tgt_devaddr arpt_devaddr
src_ip ipv4_addr
tgt_ip ipv4_addr
flags flags[arpt_mangle_flags, int8]
target flags[arpt_mangle_targets, int32]
}
arpt_mangle_flags = ARPT_MANGLE_SDEV, ARPT_MANGLE_TDEV, ARPT_MANGLE_SIP, ARPT_MANGLE_TIP, ARPT_MANGLE_MASK
arpt_mangle_targets = NF_DROP, NF_ACCEPT, XT_CONTINUE
arpt_counters_info {
name string["filter", XT_TABLE_MAXNAMELEN]
num_counters len[counters, int32]
counters array[xt_counters, 4:4]
}
arpt_getinfo {
name string["filter", XT_TABLE_MAXNAMELEN]
valid_hooks const[0, int32]
hook_entry array[const[0, int32], NF_ARP_NUMHOOKS]
underflow array[const[0, int32], NF_ARP_NUMHOOKS]
num_entries const[0, int32]
size const[0, int32]
}
arpt_get_entries {
name string["filter", XT_TABLE_MAXNAMELEN]
size bytesize[entrytable, int32]
entrytable array[int8]
}