]>
git.proxmox.com Git - mirror_iproute2.git/blob - include/bpf_scm.h
1 /* SPDX-License-Identifier: GPL-2.0 */
6 #include <sys/socket.h>
12 #define BPF_SCM_AUX_VER 1
13 #define BPF_SCM_MAX_FDS ELF_MAX_MAPS
14 #define BPF_SCM_MSG_SIZE 1024
22 unsigned short uds_ver
;
23 unsigned short num_ent
;
25 struct bpf_elf_st obj_st
;
26 struct bpf_elf_map ent
[BPF_SCM_MAX_FDS
];
29 struct bpf_map_set_msg
{
32 char msg_buf
[BPF_SCM_MSG_SIZE
];
33 struct bpf_map_aux aux
;
36 static inline int *bpf_map_set_init(struct bpf_map_set_msg
*msg
,
37 struct sockaddr_un
*addr
,
38 unsigned int addr_len
)
40 const unsigned int cmsg_ctl_len
= sizeof(int) * BPF_SCM_MAX_FDS
;
43 msg
->iov
.iov_base
= &msg
->aux
;
44 msg
->iov
.iov_len
= sizeof(msg
->aux
);
46 msg
->hdr
.msg_iov
= &msg
->iov
;
47 msg
->hdr
.msg_iovlen
= 1;
49 msg
->hdr
.msg_name
= (struct sockaddr
*)addr
;
50 msg
->hdr
.msg_namelen
= addr_len
;
52 BUILD_BUG_ON(sizeof(msg
->msg_buf
) < cmsg_ctl_len
);
53 msg
->hdr
.msg_control
= &msg
->msg_buf
;
54 msg
->hdr
.msg_controllen
= cmsg_ctl_len
;
56 cmsg
= CMSG_FIRSTHDR(&msg
->hdr
);
57 cmsg
->cmsg_len
= msg
->hdr
.msg_controllen
;
58 cmsg
->cmsg_level
= SOL_SOCKET
;
59 cmsg
->cmsg_type
= SCM_RIGHTS
;
61 return (int *)CMSG_DATA(cmsg
);
64 static inline void bpf_map_set_init_single(struct bpf_map_set_msg
*msg
,
69 msg
->hdr
.msg_controllen
= CMSG_LEN(sizeof(int) * num
);
70 msg
->iov
.iov_len
= offsetof(struct bpf_map_aux
, ent
) +
71 sizeof(struct bpf_elf_map
) * num
;
73 cmsg
= CMSG_FIRSTHDR(&msg
->hdr
);
74 cmsg
->cmsg_len
= msg
->hdr
.msg_controllen
;
77 #endif /* __BPF_SCM__ */