Compare commits
4 Commits
main
...
flag-names
| Author | SHA1 | Date |
|---|---|---|
|
|
297d7588d7 | |
|
|
d09c20e5f8 | |
|
|
5d83550131 | |
|
|
12d2bc1d71 |
|
|
@ -120,12 +120,14 @@ enum bpf_prog_type {
|
|||
BPF_PROG_TYPE_LWT_IN,
|
||||
BPF_PROG_TYPE_LWT_OUT,
|
||||
BPF_PROG_TYPE_LWT_XMIT,
|
||||
BPF_PROG_TYPE_SOCK_OPS,
|
||||
};
|
||||
|
||||
enum bpf_attach_type {
|
||||
BPF_CGROUP_INET_INGRESS,
|
||||
BPF_CGROUP_INET_EGRESS,
|
||||
BPF_CGROUP_INET_SOCK_CREATE,
|
||||
BPF_CGROUP_SOCK_OPS,
|
||||
__MAX_BPF_ATTACH_TYPE
|
||||
};
|
||||
|
||||
|
|
@ -518,6 +520,25 @@ union bpf_attr {
|
|||
* Set full skb->hash.
|
||||
* @skb: pointer to skb
|
||||
* @hash: hash to set
|
||||
*
|
||||
* int bpf_setsockopt(bpf_socket, level, optname, optval, optlen)
|
||||
* Calls setsockopt. Not all opts are available, only those with
|
||||
* integer optvals plus TCP_CONGESTION.
|
||||
* Supported levels: SOL_SOCKET and IPROTO_TCP
|
||||
* @bpf_socket: pointer to bpf_socket
|
||||
* @level: SOL_SOCKET or IPROTO_TCP
|
||||
* @optname: option name
|
||||
* @optval: pointer to option value
|
||||
* @optlen: length of optval in byes
|
||||
* Return: 0 or negative error
|
||||
*
|
||||
* int bpf_skb_adjust_room(skb, len_diff, mode, flags)
|
||||
* Grow or shrink room in sk_buff.
|
||||
* @skb: pointer to skb
|
||||
* @len_diff: (signed) amount of room to grow/shrink
|
||||
* @mode: operation mode (enum bpf_adj_room_mode)
|
||||
* @flags: reserved for future use
|
||||
* Return: 0 on success or negative error code
|
||||
*/
|
||||
#define __BPF_FUNC_MAPPER(FN) \
|
||||
FN(unspec), \
|
||||
|
|
@ -568,7 +589,9 @@ union bpf_attr {
|
|||
FN(probe_read_str), \
|
||||
FN(get_socket_cookie), \
|
||||
FN(get_socket_uid), \
|
||||
FN(set_hash),
|
||||
FN(set_hash), \
|
||||
FN(setsockopt), \
|
||||
FN(skb_adjust_room),
|
||||
|
||||
/* integer value in 'imm' field of BPF_CALL instruction selects which helper
|
||||
* function eBPF program intends to call
|
||||
|
|
@ -618,6 +641,11 @@ enum bpf_func_id {
|
|||
/* BPF_FUNC_perf_event_output for sk_buff input context. */
|
||||
#define BPF_F_CTXLEN_MASK (0xfffffULL << 32)
|
||||
|
||||
/* Mode for BPF_FUNC_skb_adjust_room helper. */
|
||||
enum bpf_adj_room_mode {
|
||||
BPF_ADJ_ROOM_NET,
|
||||
};
|
||||
|
||||
/* user accessible mirror of in-kernel sk_buff.
|
||||
* new fields can only be added to the end of this structure
|
||||
*/
|
||||
|
|
@ -720,4 +748,56 @@ struct bpf_map_info {
|
|||
__u32 map_flags;
|
||||
} __attribute__((aligned(8)));
|
||||
|
||||
/* User bpf_sock_ops struct to access socket values and specify request ops
|
||||
* and their replies.
|
||||
* Some of this fields are in network (bigendian) byte order and may need
|
||||
* to be converted before use (bpf_ntohl() defined in samples/bpf/bpf_endian.h).
|
||||
* New fields can only be added at the end of this structure
|
||||
*/
|
||||
struct bpf_sock_ops {
|
||||
__u32 op;
|
||||
union {
|
||||
__u32 reply;
|
||||
__u32 replylong[4];
|
||||
};
|
||||
__u32 family;
|
||||
__u32 remote_ip4; /* Stored in network byte order */
|
||||
__u32 local_ip4; /* Stored in network byte order */
|
||||
__u32 remote_ip6[4]; /* Stored in network byte order */
|
||||
__u32 local_ip6[4]; /* Stored in network byte order */
|
||||
__u32 remote_port; /* Stored in network byte order */
|
||||
__u32 local_port; /* stored in host byte order */
|
||||
};
|
||||
|
||||
/* List of known BPF sock_ops operators.
|
||||
* New entries can only be added at the end
|
||||
*/
|
||||
enum {
|
||||
BPF_SOCK_OPS_VOID,
|
||||
BPF_SOCK_OPS_TIMEOUT_INIT, /* Should return SYN-RTO value to use or
|
||||
* -1 if default value should be used
|
||||
*/
|
||||
BPF_SOCK_OPS_RWND_INIT, /* Should return initial advertized
|
||||
* window (in packets) or -1 if default
|
||||
* value should be used
|
||||
*/
|
||||
BPF_SOCK_OPS_TCP_CONNECT_CB, /* Calls BPF program right before an
|
||||
* active connection is initialized
|
||||
*/
|
||||
BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB, /* Calls BPF program when an
|
||||
* active connection is
|
||||
* established
|
||||
*/
|
||||
BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB, /* Calls BPF program when a
|
||||
* passive connection is
|
||||
* established
|
||||
*/
|
||||
BPF_SOCK_OPS_NEEDS_ECN, /* If connection's congestion control
|
||||
* needs ECN
|
||||
*/
|
||||
};
|
||||
|
||||
#define TCP_BPF_IW 1001 /* Set TCP initial congestion window */
|
||||
#define TCP_BPF_SNDCWND_CLAMP 1002 /* Set sndcwnd_clamp */
|
||||
|
||||
#endif /* __LINUX_BPF_H__ */
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
|
||||
#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
|
||||
#define NFS_SUPER_MAGIC 0x6969
|
||||
#define OCFS2_SUPER_MAGIC 0x7461636f
|
||||
#define OPENPROM_SUPER_MAGIC 0x9fa1
|
||||
#define QNX4_SUPER_MAGIC 0x002f /* qnx4 fs detection */
|
||||
#define QNX6_SUPER_MAGIC 0x68191122 /* qnx6 fs detection */
|
||||
|
|
@ -80,6 +81,8 @@
|
|||
#define BTRFS_TEST_MAGIC 0x73727279
|
||||
#define NSFS_MAGIC 0x6e736673
|
||||
#define BPF_FS_MAGIC 0xcafe4a11
|
||||
#define AAFS_MAGIC 0x5a3c69f0
|
||||
|
||||
/* Since UDF 2.01 is ISO 13346 based... */
|
||||
#define UDF_SUPER_MAGIC 0x15013346
|
||||
#define BALLOON_KVM_MAGIC 0x13661366
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ typedef __s32 sctp_assoc_t;
|
|||
#define SCTP_RESET_STREAMS 119
|
||||
#define SCTP_RESET_ASSOC 120
|
||||
#define SCTP_ADD_STREAMS 121
|
||||
#define SCTP_SOCKOPT_PEELOFF_FLAGS 122
|
||||
|
||||
/* PR-SCTP policies */
|
||||
#define SCTP_PR_SCTP_NONE 0x0000
|
||||
|
|
@ -972,6 +973,11 @@ typedef struct {
|
|||
int sd;
|
||||
} sctp_peeloff_arg_t;
|
||||
|
||||
typedef struct {
|
||||
sctp_peeloff_arg_t p_arg;
|
||||
unsigned flags;
|
||||
} sctp_peeloff_flags_arg_t;
|
||||
|
||||
/*
|
||||
* Peer Address Thresholds socket option
|
||||
*/
|
||||
|
|
|
|||
153
ip/ipaddress.c
153
ip/ipaddress.c
|
|
@ -18,7 +18,6 @@
|
|||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/param.h>
|
||||
#include <errno.h>
|
||||
#include <netinet/in.h>
|
||||
|
|
@ -1013,14 +1012,67 @@ static unsigned int get_ifa_flags(struct ifaddrmsg *ifa,
|
|||
ifa->ifa_flags;
|
||||
}
|
||||
|
||||
|
||||
static const char *ifa_flag_names[] = {
|
||||
"secondary",
|
||||
"nodad",
|
||||
"optimistic",
|
||||
"dadfailed",
|
||||
"home",
|
||||
"deprecated",
|
||||
"tentative",
|
||||
"permanent",
|
||||
"mngtmpaddr",
|
||||
"noprefixroute",
|
||||
"autojoin",
|
||||
"stable-privacy",
|
||||
};
|
||||
|
||||
static void print_ifa_flags(FILE *fp, const struct ifaddrmsg *ifa, unsigned int flags)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ifa_flag_names); i++) {
|
||||
unsigned int mask = 1u << i;
|
||||
|
||||
if (mask == IFA_F_PERMANENT) {
|
||||
if (!(flags & mask))
|
||||
fprintf(fp, "dynamic ");
|
||||
} else if (flags & mask) {
|
||||
if (mask == IFA_F_SECONDARY) {
|
||||
if (ifa->ifa_family == AF_INET6)
|
||||
fprintf(fp, "temporary ");
|
||||
else
|
||||
fprintf(fp, "secondary ");
|
||||
} else
|
||||
fprintf(fp, "%s ", ifa_flag_names[i]);
|
||||
}
|
||||
|
||||
flags &= ~mask;
|
||||
}
|
||||
|
||||
if (flags)
|
||||
fprintf(fp, "flags %02x ", flags);
|
||||
|
||||
}
|
||||
|
||||
static unsigned int get_ifa_flag_mask(const char *name)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ifa_flag_names); i++) {
|
||||
if (!strcmp(name, ifa_flag_names[i]))
|
||||
return 1u << i;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
||||
void *arg)
|
||||
{
|
||||
FILE *fp = arg;
|
||||
struct ifaddrmsg *ifa = NLMSG_DATA(n);
|
||||
int len = n->nlmsg_len;
|
||||
int deprecated = 0;
|
||||
/* Use local copy of ifa_flags to not interfere with filtering code */
|
||||
unsigned int ifa_flags;
|
||||
struct rtattr *rta_tb[IFA_MAX+1];
|
||||
|
||||
|
|
@ -1040,6 +1092,7 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
|||
parse_rtattr(rta_tb, IFA_MAX, IFA_RTA(ifa),
|
||||
n->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa)));
|
||||
|
||||
|
||||
ifa_flags = get_ifa_flags(ifa, rta_tb[IFA_FLAGS]);
|
||||
|
||||
if (!rta_tb[IFA_LOCAL])
|
||||
|
|
@ -1145,52 +1198,9 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
|||
rta_tb[IFA_ANYCAST]));
|
||||
}
|
||||
fprintf(fp, "scope %s ", rtnl_rtscope_n2a(ifa->ifa_scope, b1, sizeof(b1)));
|
||||
if (ifa_flags & IFA_F_SECONDARY) {
|
||||
ifa_flags &= ~IFA_F_SECONDARY;
|
||||
if (ifa->ifa_family == AF_INET6)
|
||||
fprintf(fp, "temporary ");
|
||||
else
|
||||
fprintf(fp, "secondary ");
|
||||
}
|
||||
if (ifa_flags & IFA_F_TENTATIVE) {
|
||||
ifa_flags &= ~IFA_F_TENTATIVE;
|
||||
fprintf(fp, "tentative ");
|
||||
}
|
||||
if (ifa_flags & IFA_F_DEPRECATED) {
|
||||
ifa_flags &= ~IFA_F_DEPRECATED;
|
||||
deprecated = 1;
|
||||
fprintf(fp, "deprecated ");
|
||||
}
|
||||
if (ifa_flags & IFA_F_HOMEADDRESS) {
|
||||
ifa_flags &= ~IFA_F_HOMEADDRESS;
|
||||
fprintf(fp, "home ");
|
||||
}
|
||||
if (ifa_flags & IFA_F_NODAD) {
|
||||
ifa_flags &= ~IFA_F_NODAD;
|
||||
fprintf(fp, "nodad ");
|
||||
}
|
||||
if (ifa_flags & IFA_F_MANAGETEMPADDR) {
|
||||
ifa_flags &= ~IFA_F_MANAGETEMPADDR;
|
||||
fprintf(fp, "mngtmpaddr ");
|
||||
}
|
||||
if (ifa_flags & IFA_F_NOPREFIXROUTE) {
|
||||
ifa_flags &= ~IFA_F_NOPREFIXROUTE;
|
||||
fprintf(fp, "noprefixroute ");
|
||||
}
|
||||
if (ifa_flags & IFA_F_MCAUTOJOIN) {
|
||||
ifa_flags &= ~IFA_F_MCAUTOJOIN;
|
||||
fprintf(fp, "autojoin ");
|
||||
}
|
||||
if (!(ifa_flags & IFA_F_PERMANENT))
|
||||
fprintf(fp, "dynamic ");
|
||||
else
|
||||
ifa_flags &= ~IFA_F_PERMANENT;
|
||||
if (ifa_flags & IFA_F_DADFAILED) {
|
||||
ifa_flags &= ~IFA_F_DADFAILED;
|
||||
fprintf(fp, "dadfailed ");
|
||||
}
|
||||
if (ifa_flags)
|
||||
fprintf(fp, "flags %02x ", ifa_flags);
|
||||
|
||||
print_ifa_flags(fp, ifa, ifa_flags);
|
||||
|
||||
if (rta_tb[IFA_LABEL])
|
||||
fprintf(fp, "%s", rta_getattr_str(rta_tb[IFA_LABEL]));
|
||||
if (rta_tb[IFA_CACHEINFO]) {
|
||||
|
|
@ -1206,7 +1216,7 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
|||
if (ci->ifa_prefered == INFINITY_LIFE_TIME)
|
||||
fprintf(fp, "forever");
|
||||
else {
|
||||
if (deprecated)
|
||||
if (ifa_flags & IFA_F_DEPRECATED)
|
||||
fprintf(fp, "%dsec", ci->ifa_prefered);
|
||||
else
|
||||
fprintf(fp, "%usec", ci->ifa_prefered);
|
||||
|
|
@ -1570,6 +1580,7 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action)
|
|||
struct nlmsg_chain _ainfo = { NULL, NULL}, *ainfo = NULL;
|
||||
struct nlmsg_list *l;
|
||||
char *filter_dev = NULL;
|
||||
unsigned int mask;
|
||||
int no_link = 0;
|
||||
|
||||
ipaddr_reset_filter(oneline, 0);
|
||||
|
|
@ -1612,49 +1623,15 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action)
|
|||
} else if (strcmp(*argv, "dynamic") == 0) {
|
||||
filter.flags &= ~IFA_F_PERMANENT;
|
||||
filter.flagmask |= IFA_F_PERMANENT;
|
||||
} else if (strcmp(*argv, "permanent") == 0) {
|
||||
filter.flags |= IFA_F_PERMANENT;
|
||||
filter.flagmask |= IFA_F_PERMANENT;
|
||||
} else if (strcmp(*argv, "secondary") == 0 ||
|
||||
strcmp(*argv, "temporary") == 0) {
|
||||
} else if (strcmp(*argv, "temporary") == 0) {
|
||||
filter.flags |= IFA_F_SECONDARY;
|
||||
filter.flagmask |= IFA_F_SECONDARY;
|
||||
} else if (strcmp(*argv, "primary") == 0) {
|
||||
filter.flags &= ~IFA_F_SECONDARY;
|
||||
filter.flagmask |= IFA_F_SECONDARY;
|
||||
} else if (strcmp(*argv, "tentative") == 0) {
|
||||
filter.flags |= IFA_F_TENTATIVE;
|
||||
filter.flagmask |= IFA_F_TENTATIVE;
|
||||
} else if (strcmp(*argv, "-tentative") == 0) {
|
||||
filter.flags &= ~IFA_F_TENTATIVE;
|
||||
filter.flagmask |= IFA_F_TENTATIVE;
|
||||
} else if (strcmp(*argv, "deprecated") == 0) {
|
||||
filter.flags |= IFA_F_DEPRECATED;
|
||||
filter.flagmask |= IFA_F_DEPRECATED;
|
||||
} else if (strcmp(*argv, "-deprecated") == 0) {
|
||||
filter.flags &= ~IFA_F_DEPRECATED;
|
||||
filter.flagmask |= IFA_F_DEPRECATED;
|
||||
} else if (strcmp(*argv, "home") == 0) {
|
||||
filter.flags |= IFA_F_HOMEADDRESS;
|
||||
filter.flagmask |= IFA_F_HOMEADDRESS;
|
||||
} else if (strcmp(*argv, "nodad") == 0) {
|
||||
filter.flags |= IFA_F_NODAD;
|
||||
filter.flagmask |= IFA_F_NODAD;
|
||||
} else if (strcmp(*argv, "mngtmpaddr") == 0) {
|
||||
filter.flags |= IFA_F_MANAGETEMPADDR;
|
||||
filter.flagmask |= IFA_F_MANAGETEMPADDR;
|
||||
} else if (strcmp(*argv, "noprefixroute") == 0) {
|
||||
filter.flags |= IFA_F_NOPREFIXROUTE;
|
||||
filter.flagmask |= IFA_F_NOPREFIXROUTE;
|
||||
} else if (strcmp(*argv, "autojoin") == 0) {
|
||||
filter.flags |= IFA_F_MCAUTOJOIN;
|
||||
filter.flagmask |= IFA_F_MCAUTOJOIN;
|
||||
} else if (strcmp(*argv, "dadfailed") == 0) {
|
||||
filter.flags |= IFA_F_DADFAILED;
|
||||
filter.flagmask |= IFA_F_DADFAILED;
|
||||
} else if (strcmp(*argv, "-dadfailed") == 0) {
|
||||
filter.flags &= ~IFA_F_DADFAILED;
|
||||
filter.flagmask |= IFA_F_DADFAILED;
|
||||
} else if ((mask = get_ifa_flag_mask(*argv)) != 0) {
|
||||
filter.flags |= mask;
|
||||
filter.flagmask |= mask;
|
||||
} else if (strcmp(*argv, "label") == 0) {
|
||||
NEXT_ARG();
|
||||
filter.label = *argv;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
#include <arpa/inet.h>
|
||||
#include <string.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <linux/sockios.h>
|
||||
#include <stdbool.h>
|
||||
#include <linux/mpls.h>
|
||||
|
||||
|
|
|
|||
10
ip/iproute.c
10
ip/iproute.c
|
|
@ -1731,6 +1731,16 @@ static int iproute_get(int argc, char **argv)
|
|||
addattr32(&req.n, sizeof(req), RTA_UID, uid);
|
||||
} else if (matches(*argv, "fibmatch") == 0) {
|
||||
fib_match = 1;
|
||||
} else if (strcmp(*argv, "as") == 0) {
|
||||
inet_prefix addr;
|
||||
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "to") == 0)
|
||||
NEXT_ARG();
|
||||
get_addr(&addr, *argv, req.r.rtm_family);
|
||||
if (req.r.rtm_family == AF_UNSPEC)
|
||||
req.r.rtm_family = addr.family;
|
||||
addattr_l(&req.n, sizeof(req), RTA_NEWDST, &addr.data, addr.bytelen);
|
||||
} else {
|
||||
inet_prefix addr;
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <string.h>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <string.h>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <string.h>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <limits.h>
|
||||
|
|
|
|||
Loading…
Reference in New Issue