1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | /* |
3 | * Copyright (C) 2011 - 2014 Red Hat, Inc. |
4 | */ |
5 | |
6 | #ifndef __NM_SETTING_VLAN_H__ |
7 | #define __NM_SETTING_VLAN_H__ |
8 | |
9 | #if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION) |
10 | #error "Only <NetworkManager.h> can be included directly." |
11 | #endif |
12 | |
13 | #include "nm-setting.h" |
14 | |
15 | G_BEGIN_DECLS |
16 | |
17 | #define NM_TYPE_SETTING_VLAN (nm_setting_vlan_get_type()) |
18 | #define NM_SETTING_VLAN(obj) \ |
19 | (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_VLAN, NMSettingVlan)) |
20 | #define NM_SETTING_VLAN_CLASS(klass) \ |
21 | (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_VLANCONFIG, NMSettingVlanClass)) |
22 | #define NM_IS_SETTING_VLAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_VLAN)) |
23 | #define NM_IS_SETTING_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_VLAN)) |
24 | #define NM_SETTING_VLAN_GET_CLASS(obj) \ |
25 | (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_VLAN, NMSettingVlanClass)) |
26 | |
27 | #define NM_SETTING_VLAN_SETTING_NAME "vlan" |
28 | |
29 | #define NM_SETTING_VLAN_PARENT "parent" |
30 | #define NM_SETTING_VLAN_ID "id" |
31 | #define NM_SETTING_VLAN_FLAGS "flags" |
32 | #define NM_SETTING_VLAN_INGRESS_PRIORITY_MAP "ingress-priority-map" |
33 | #define NM_SETTING_VLAN_EGRESS_PRIORITY_MAP "egress-priority-map" |
34 | |
35 | typedef struct _NMSettingVlanClass NMSettingVlanClass; |
36 | |
37 | /** |
38 | * NMVlanPriorityMap: |
39 | * @NM_VLAN_INGRESS_MAP: map for incoming data |
40 | * @NM_VLAN_EGRESS_MAP: map for outgoing data |
41 | * |
42 | * A selector for traffic priority maps; these map Linux SKB priorities |
43 | * to 802.1p priorities used in VLANs. |
44 | **/ |
45 | /* clang-format off */ |
46 | typedef enum { |
47 | NM_VLAN_INGRESS_MAP, |
48 | NM_VLAN_EGRESS_MAP |
49 | } NMVlanPriorityMap; |
50 | /* clang-format on */ |
51 | |
52 | /** |
53 | * NMVlanFlags: |
54 | * @NM_VLAN_FLAG_REORDER_HEADERS: indicates that this interface should reorder |
55 | * outgoing packet headers to look more like a non-VLAN Ethernet interface |
56 | * @NM_VLAN_FLAG_GVRP: indicates that this interface should use GVRP to register |
57 | * itself with its switch |
58 | * @NM_VLAN_FLAG_LOOSE_BINDING: indicates that this interface's operating |
59 | * state is tied to the underlying network interface but other details |
60 | * (like routing) are not. |
61 | * @NM_VLAN_FLAG_MVRP: indicates that this interface should use MVRP to register |
62 | * itself with its switch |
63 | * |
64 | * #NMVlanFlags values control the behavior of the VLAN interface. |
65 | **/ |
66 | typedef enum { /*< flags >*/ |
67 | |
68 | = 0x1, |
69 | NM_VLAN_FLAG_GVRP = 0x2, |
70 | NM_VLAN_FLAG_LOOSE_BINDING = 0x4, |
71 | NM_VLAN_FLAG_MVRP = 0x8, |
72 | |
73 | /* NOTE: if adding flags update nm-setting-vlan.c::verify() */ |
74 | |
75 | /* NOTE: these flags must correspond to the value from the kernel |
76 | * header files. */ |
77 | } NMVlanFlags; |
78 | |
79 | #define NM_VLAN_FLAGS_ALL \ |
80 | (NM_VLAN_FLAG_REORDER_HEADERS | NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING \ |
81 | | NM_VLAN_FLAG_MVRP) |
82 | |
83 | GType nm_setting_vlan_get_type(void); |
84 | NMSetting *nm_setting_vlan_new(void); |
85 | |
86 | const char *nm_setting_vlan_get_parent(NMSettingVlan *setting); |
87 | guint32 nm_setting_vlan_get_id(NMSettingVlan *setting); |
88 | guint32 nm_setting_vlan_get_flags(NMSettingVlan *setting); |
89 | |
90 | gint32 nm_setting_vlan_get_num_priorities(NMSettingVlan *setting, NMVlanPriorityMap map); |
91 | |
92 | gboolean nm_setting_vlan_get_priority(NMSettingVlan *setting, |
93 | NMVlanPriorityMap map, |
94 | guint32 idx, |
95 | guint32 *out_from, |
96 | guint32 *out_to); |
97 | |
98 | gboolean nm_setting_vlan_add_priority(NMSettingVlan *setting, |
99 | NMVlanPriorityMap map, |
100 | guint32 from, |
101 | guint32 to); |
102 | |
103 | void nm_setting_vlan_remove_priority(NMSettingVlan *setting, NMVlanPriorityMap map, guint32 idx); |
104 | |
105 | gboolean nm_setting_vlan_remove_priority_by_value(NMSettingVlan *setting, |
106 | NMVlanPriorityMap map, |
107 | guint32 from, |
108 | guint32 to); |
109 | |
110 | gboolean nm_setting_vlan_remove_priority_str_by_value(NMSettingVlan *setting, |
111 | NMVlanPriorityMap map, |
112 | const char *str); |
113 | |
114 | void nm_setting_vlan_clear_priorities(NMSettingVlan *setting, NMVlanPriorityMap map); |
115 | |
116 | gboolean |
117 | nm_setting_vlan_add_priority_str(NMSettingVlan *setting, NMVlanPriorityMap map, const char *str); |
118 | |
119 | G_END_DECLS |
120 | |
121 | #endif /* __NM_SETTING_VLAN_H__ */ |
122 | |