10#define EBPF_HELPER(return_type, name, args) typedef return_type(*const name##_t) args
114#pragma warning(disable : 4201)
152#define SOCK_ADDR_EXT_HELPER_FN_BASE 0xFFFF
174#define bpf_sock_addr_set_redirect_context \
175 ((bpf_sock_addr_set_redirect_context_t)BPF_FUNC_sock_addr_set_redirect_context)
191#define BPF_SOCK_ADDR_NETWORK_CONTEXT_VERSION 1
205#define bpf_sock_addr_get_network_context ((bpf_sock_addr_get_network_context_t)BPF_FUNC_sock_addr_get_network_context)
283#define SOCK_OPS_EXT_HELPER_FN_BASE 0xFFFF
299#define bpf_sock_ops_get_flow_id ((bpf_sock_ops_get_flow_id_t)BPF_FUNC_sock_ops_get_flow_id)
enum _bind_operation bind_operation_t
#define SOCK_ADDR_EXT_HELPER_FN_BASE
Definition ebpf_nethooks.h:152
ebpf_sock_ops_helper_id_t
Definition ebpf_nethooks.h:286
@ BPF_FUNC_sock_ops_get_flow_id
Definition ebpf_nethooks.h:287
ebpf_sock_addr_verdict_t sock_addr_hook_t(bpf_sock_addr_t *context)
Handle socket operation. Currently supports ingress/egress connection initialization.
Definition ebpf_nethooks.h:229
enum _ebpf_sock_addr_verdict ebpf_sock_addr_verdict_t
uint64_t bpf_sock_ops_get_flow_id(bpf_sock_ops_t *ctx)
Get the WFP flow ID associated with the current sock_ops context.
ebpf_sock_addr_helper_id_t
Definition ebpf_nethooks.h:155
@ BPF_FUNC_sock_addr_set_redirect_context
Definition ebpf_nethooks.h:157
@ BPF_FUNC_sock_addr_get_current_pid_tgid
Definition ebpf_nethooks.h:156
@ BPF_FUNC_sock_addr_get_network_context
Definition ebpf_nethooks.h:158
enum _bpf_sock_op_type bpf_sock_op_type_t
int sock_ops_hook_t(bpf_sock_ops_t *context)
Handle socket event notification. Currently notifies ingress/egress connection establishment and tear...
Definition ebpf_nethooks.h:281
int bpf_sock_addr_set_redirect_context(bpf_sock_addr_t *ctx, void *data, uint32_t data_size)
Set a context for consumption by a user-mode application (sock_addr specific only)....
_bind_operation
Definition ebpf_nethooks.h:16
@ BIND_OPERATION_BIND
Entry to bind.
Definition ebpf_nethooks.h:17
@ BIND_OPERATION_UNBIND
Release port.
Definition ebpf_nethooks.h:19
@ BIND_OPERATION_POST_BIND
After port allocation.
Definition ebpf_nethooks.h:18
_bind_action
Actions that can be returned by a bind hook program.
Definition ebpf_nethooks.h:37
@ BIND_REDIRECT
Change the bind endpoint.
Definition ebpf_nethooks.h:60
@ BIND_PERMIT_SOFT
Permit the bind operation (soft permit).
Definition ebpf_nethooks.h:44
@ BIND_PERMIT
Backward compatibility alias for BIND_PERMIT_SOFT.
Definition ebpf_nethooks.h:74
@ BIND_PERMIT_HARD
Permit the bind operation (hard permit).
Definition ebpf_nethooks.h:68
@ BIND_DENY
Deny the bind operation.
Definition ebpf_nethooks.h:51
_bpf_sock_op_type
Definition ebpf_nethooks.h:232
@ BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB
Indicates when a passive (inbound) connection is established.
Definition ebpf_nethooks.h:236
@ BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB
Indicates when an active (outbound) connection is established.
Definition ebpf_nethooks.h:234
@ BPF_SOCK_OPS_CONNECTION_DELETED_CB
Indicates when a connection is deleted.
Definition ebpf_nethooks.h:238
bind_action_t bind_hook_t(bind_md_t *context)
Handle IPv4 and IPv6 socket bind() requests.
Definition ebpf_nethooks.h:99
struct bpf_sock_addr bpf_sock_addr_t
Data structure used as context for BPF_PROG_TYPE_CGROUP_SOCK_ADDR program type.
#define SOCK_OPS_EXT_HELPER_FN_BASE
Definition ebpf_nethooks.h:283
int bpf_sock_addr_get_network_context(bpf_sock_addr_t *ctx, void *context_ptr, uint32_t context_size)
Get the network context for the connection (CONNECT_AUTHORIZATION and RECV_ACCEPT only).
_ebpf_sock_addr_verdict
Definition ebpf_nethooks.h:106
@ BPF_SOCK_ADDR_VERDICT_REJECT
Definition ebpf_nethooks.h:107
@ BPF_SOCK_ADDR_VERDICT_PROCEED_SOFT
Definition ebpf_nethooks.h:108
@ BPF_SOCK_ADDR_VERDICT_PROCEED_HARD
Definition ebpf_nethooks.h:109
enum _bind_action bind_action_t
Actions that can be returned by a bind hook program.
struct _bind_md bind_md_t
struct _bpf_sock_ops bpf_sock_ops_t
struct _bpf_sock_addr_network_context bpf_sock_addr_network_context_t
Network context information for the connection. Available for CONNECT_AUTHORIZATION and RECV_ACCEPT a...
Definition ebpf_nethooks.h:23
uint8_t protocol
Protocol number (e.g., IPPROTO_TCP).
Definition ebpf_nethooks.h:30
bind_operation_t operation
Operation to do.
Definition ebpf_nethooks.h:29
uint8_t * app_id_end
Pointer to end of App ID.
Definition ebpf_nethooks.h:25
uint8_t socket_address[16]
Socket address to bind to.
Definition ebpf_nethooks.h:27
uint64_t process_id
Process ID.
Definition ebpf_nethooks.h:26
uint8_t * app_id_start
Pointer to start of App ID.
Definition ebpf_nethooks.h:24
uint8_t socket_address_length
Length in bytes of the socket address.
Definition ebpf_nethooks.h:28
Network context information for the connection. Available for CONNECT_AUTHORIZATION and RECV_ACCEPT a...
Definition ebpf_nethooks.h:183
uint32_t sub_interface_index
Sub-interface index, or 0 if not available.
Definition ebpf_nethooks.h:188
uint32_t interface_type
IANA interface type, or UINT32_MAX if not available.
Definition ebpf_nethooks.h:185
uint32_t version
Struct version (currently 1).
Definition ebpf_nethooks.h:184
uint32_t tunnel_type
IANA tunnel type; 0 if not a tunnel, or UINT32_MAX if not available.
Definition ebpf_nethooks.h:186
uint64_t next_hop_interface_luid
Next-hop interface LUID, or 0 if not available.
Definition ebpf_nethooks.h:187
Definition ebpf_nethooks.h:242
uint32_t local_ip4
Definition ebpf_nethooks.h:249
uint32_t family
IP address family.
Definition ebpf_nethooks.h:244
uint32_t remote_ip4
Definition ebpf_nethooks.h:258
uint32_t compartment_id
Network compartment Id.
Definition ebpf_nethooks.h:264
uint8_t protocol
IP protocol.
Definition ebpf_nethooks.h:263
uint32_t remote_port
Definition ebpf_nethooks.h:261
uint64_t interface_luid
Interface LUID.
Definition ebpf_nethooks.h:265
uint32_t local_ip6[4]
Definition ebpf_nethooks.h:250
bpf_sock_op_type_t op
Definition ebpf_nethooks.h:243
uint32_t remote_ip6[4]
Definition ebpf_nethooks.h:259
uint32_t local_port
Definition ebpf_nethooks.h:252
Data structure used as context for BPF_PROG_TYPE_CGROUP_SOCK_ADDR program type.
Definition ebpf_nethooks.h:120
uint32_t protocol
IP protocol.
Definition ebpf_nethooks.h:147
uint16_t user_port
Destination port in network byte order.
Definition ebpf_nethooks.h:145
uint16_t msg_src_port
Source port in network byte order.
Definition ebpf_nethooks.h:133
uint32_t user_ip4
Definition ebpf_nethooks.h:142
uint32_t user_ip6[4]
Definition ebpf_nethooks.h:143
uint32_t compartment_id
Network compartment Id.
Definition ebpf_nethooks.h:148
uint32_t msg_src_ip6[4]
Definition ebpf_nethooks.h:131
uint64_t interface_luid
Interface LUID.
Definition ebpf_nethooks.h:149
uint32_t msg_src_ip4
Definition ebpf_nethooks.h:130
uint32_t family
IP address family.
Definition ebpf_nethooks.h:121