]> git.proxmox.com Git - mirror_frr.git/blame - zebra/tc_netlink.h
tools: config clang-format to allow aligned macros
[mirror_frr.git] / zebra / tc_netlink.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
449a30ed
SY
2/*
3 * Zebra Traffic Control (TC) interaction with the kernel using netlink.
4 *
5 * Copyright (C) 2022 Shichu Yang
449a30ed
SY
6 */
7
8#ifndef _ZEBRA_TC_NETLINK_H
9#define _ZEBRA_TC_NETLINK_H
10
11#ifdef HAVE_NETLINK
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17/* Represent a prefixed address in flower filter */
18
19struct inet_prefix {
20 uint16_t flags;
21 uint16_t bytelen;
22 uint16_t bitlen;
23 uint16_t family;
24 uint32_t data[64];
25};
26
27enum {
28 PREFIXLEN_SPECIFIED = (1 << 0),
29 ADDRTYPE_INET = (1 << 1),
30 ADDRTYPE_UNSPEC = (1 << 2),
31 ADDRTYPE_MULTI = (1 << 3),
32
33 ADDRTYPE_INET_UNSPEC = ADDRTYPE_INET | ADDRTYPE_UNSPEC,
34 ADDRTYPE_INET_MULTI = ADDRTYPE_INET | ADDRTYPE_MULTI
35};
36
37extern enum netlink_msg_status
c317d3f2
SY
38netlink_put_tc_qdisc_update_msg(struct nl_batch *bth,
39 struct zebra_dplane_ctx *ctx);
40extern enum netlink_msg_status
41netlink_put_tc_class_update_msg(struct nl_batch *bth,
42 struct zebra_dplane_ctx *ctx);
43extern enum netlink_msg_status
44netlink_put_tc_filter_update_msg(struct nl_batch *bth,
45 struct zebra_dplane_ctx *ctx);
46
47/**
48 * "filter" & "class" in the following become "tfilter" & "tclass" for
49 * the sake of consistency with kernel message types (RTM_NEWTFILTER etc.)
50 */
51
52extern int netlink_qdisc_read(struct zebra_ns *zns);
53extern int netlink_tfilter_read_for_interface(struct zebra_ns *zns,
54 ifindex_t ifindex);
55
56extern int netlink_tfilter_change(struct nlmsghdr *h, ns_id_t ns_id,
57 int startup);
58extern int netlink_tclass_change(struct nlmsghdr *h, ns_id_t ns_id,
59 int startup);
60extern int netlink_qdisc_change(struct nlmsghdr *h, ns_id_t ns_id, int startup);
61
449a30ed
SY
62
63#ifdef __cplusplus
64}
65#endif
66
67#endif /* HAVE_NETLINK */
68
69#endif /* _ZEBRA_TC_NETLINK_H */