]>
Commit | Line | Data |
---|---|---|
abeab069 MT |
1 | /*############################################################################# |
2 | # # | |
3 | # IPFire.org - A linux based firewall # | |
4 | # Copyright (C) 2023 IPFire Network Development Team # | |
5 | # # | |
6 | # This program is free software: you can redistribute it and/or modify # | |
7 | # it under the terms of the GNU General Public License as published by # | |
8 | # the Free Software Foundation, either version 3 of the License, or # | |
9 | # (at your option) any later version. # | |
10 | # # | |
11 | # This program is distributed in the hope that it will be useful, # | |
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of # | |
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # | |
14 | # GNU General Public License for more details. # | |
15 | # # | |
16 | # You should have received a copy of the GNU General Public License # | |
17 | # along with this program. If not, see <http://www.gnu.org/licenses/>. # | |
18 | # # | |
19 | #############################################################################*/ | |
20 | ||
21 | #ifndef NETWORKD_PORT_H | |
22 | #define NETWORKD_PORT_H | |
23 | ||
e9b0614e MT |
24 | #include <json.h> |
25 | ||
240e331b MT |
26 | #include <systemd/sd-netlink.h> |
27 | ||
ff886975 MT |
28 | #ifndef IF_NAMESIZE |
29 | #define IF_NAMESIZE 16 | |
30 | #endif | |
31 | ||
c791afc8 MT |
32 | #define PORT_CONFIG_DIR CONFIG_DIR "/ports" |
33 | ||
2361667e | 34 | typedef struct nw_port nw_port; |
abeab069 | 35 | |
c464b5d1 | 36 | typedef enum nw_port_type_id { |
c464b5d1 MT |
37 | NW_PORT_BONDING, |
38 | NW_PORT_DUMMY, | |
67d3fef1 | 39 | NW_PORT_VETH, |
c464b5d1 MT |
40 | NW_PORT_VLAN, |
41 | } nw_port_type_id_t; | |
42 | ||
43 | typedef struct nw_port_type { | |
44 | // Type ID | |
45 | nw_port_type_id_t id; | |
4a383286 | 46 | |
240e331b MT |
47 | // IFLA_INFO_KIND/IFLA_INFO_DATA |
48 | const char* kind; | |
49 | ||
c464b5d1 MT |
50 | // Configuration |
51 | int (*setup)(nw_port* port); | |
ea7dc1bb | 52 | int (*validate)(nw_port* port); |
ff886975 | 53 | |
c464b5d1 MT |
54 | // Get Parent Port |
55 | nw_port* (*get_parent_port)(nw_port* port); | |
240e331b | 56 | |
c464b5d1 MT |
57 | // Link |
58 | int (*create_link)(nw_port* port, sd_netlink_message* message); | |
59 | int (*destroy_link)(nw_port* port); | |
e9b0614e | 60 | |
c464b5d1 MT |
61 | // JSON |
62 | int (*to_json)(nw_port* port, struct json_object* object); | |
63 | } nw_port_type_t; | |
64 | ||
65 | #include "address.h" | |
66 | #include "config.h" | |
67 | #include "daemon.h" | |
68 | #include "json.h" | |
69 | #include "port-bonding.h" | |
67d3fef1 | 70 | #include "port-veth.h" |
c464b5d1 | 71 | #include "port-vlan.h" |
89f8f6af | 72 | |
c464b5d1 | 73 | #define NW_PORT_TYPE(port) (port->type) |
9e8af30e | 74 | |
ff886975 MT |
75 | struct nw_port { |
76 | nw_daemon* daemon; | |
77 | int nrefs; | |
78 | ||
79 | // Link | |
80 | nw_link* link; | |
81 | ||
c464b5d1 | 82 | const nw_port_type_t* type; |
ff886975 MT |
83 | char name[IF_NAMESIZE]; |
84 | ||
85 | // Configuration | |
86 | nw_config *config; | |
87 | ||
88 | // Common attributes | |
89 | nw_address_t address; | |
90 | ||
95c5dca2 MT |
91 | // Bonding Settings |
92 | struct nw_port_bonding bonding; | |
93 | ||
67d3fef1 MT |
94 | // VETH Settings |
95 | struct nw_port_veth veth; | |
96 | ||
ff886975 | 97 | // VLAN settings |
4d6ac814 | 98 | struct nw_port_vlan vlan; |
ff886975 MT |
99 | }; |
100 | ||
06bc93d3 | 101 | int nw_port_create(nw_port** port, nw_daemon* daemon, |
c464b5d1 | 102 | const nw_port_type_id_t type, const char* name, nw_config* config); |
8edf3da1 | 103 | int nw_port_open(nw_port** port, nw_daemon* daemon, const char* name); |
abeab069 | 104 | |
2361667e MT |
105 | nw_port* nw_port_ref(nw_port* port); |
106 | nw_port* nw_port_unref(nw_port* port); | |
abeab069 | 107 | |
c403eb4c MT |
108 | int nw_port_destroy(nw_port* port); |
109 | int __nw_port_drop_port(nw_daemon* daemon, nw_port* port, void* data); | |
110 | ||
605e975f MT |
111 | int nw_port_save(nw_port* port); |
112 | ||
2361667e | 113 | const char* nw_port_name(nw_port* port); |
abeab069 | 114 | |
2361667e | 115 | char* nw_port_bus_path(nw_port* port); |
7297ba7f | 116 | |
611d4aca MT |
117 | int __nw_port_set_link(nw_daemon* daemon, nw_port* port, void* data); |
118 | int __nw_port_drop_link(nw_daemon* daemon, nw_port* port, void* data); | |
119 | ||
2361667e | 120 | const nw_address_t* nw_port_get_address(nw_port* port); |
4a383286 | 121 | |
5a5c346c MT |
122 | nw_port* nw_port_get_parent_port(nw_port* port); |
123 | ||
b9769b09 MT |
124 | int nw_port_reconfigure(nw_port* port); |
125 | ||
20375a08 MT |
126 | int nw_port_has_carrier(nw_port* port); |
127 | ||
c464b5d1 | 128 | int nw_port_check_type(nw_port* port, const nw_port_type_id_t type); |
ff886975 | 129 | |
15240e08 MT |
130 | // Stats |
131 | const struct rtnl_link_stats64* nw_port_get_stats64(nw_port* port); | |
132 | int __nw_port_update_stats(nw_daemon* daemon, nw_port* port, void* data); | |
133 | int nw_port_update_stats(nw_port* port); | |
134 | ||
e9b0614e MT |
135 | // JSON |
136 | int nw_port_to_json(nw_port* port, struct json_object** object); | |
137 | ||
abeab069 | 138 | #endif /* NETWORKD_PORT_H */ |