]>
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 | ||
2361667e | 28 | typedef struct nw_port nw_port; |
abeab069 | 29 | |
c464b5d1 | 30 | typedef enum nw_port_type_id { |
c464b5d1 MT |
31 | NW_PORT_BONDING, |
32 | NW_PORT_DUMMY, | |
f4f98a38 | 33 | NW_PORT_ETHERNET, |
67d3fef1 | 34 | NW_PORT_VETH, |
c464b5d1 MT |
35 | NW_PORT_VLAN, |
36 | } nw_port_type_id_t; | |
37 | ||
38 | typedef struct nw_port_type { | |
39 | // Type ID | |
40 | nw_port_type_id_t id; | |
4a383286 | 41 | |
240e331b MT |
42 | // IFLA_INFO_KIND/IFLA_INFO_DATA |
43 | const char* kind; | |
44 | ||
c464b5d1 MT |
45 | // Configuration |
46 | int (*setup)(nw_port* port); | |
ea7dc1bb | 47 | int (*validate)(nw_port* port); |
ff886975 | 48 | |
c464b5d1 MT |
49 | // Get Parent Port |
50 | nw_port* (*get_parent_port)(nw_port* port); | |
240e331b | 51 | |
c464b5d1 MT |
52 | // Link |
53 | int (*create_link)(nw_port* port, sd_netlink_message* message); | |
54 | int (*destroy_link)(nw_port* port); | |
e9b0614e | 55 | |
c464b5d1 MT |
56 | // JSON |
57 | int (*to_json)(nw_port* port, struct json_object* object); | |
58 | } nw_port_type_t; | |
59 | ||
60 | #include "address.h" | |
61 | #include "config.h" | |
62 | #include "daemon.h" | |
63 | #include "json.h" | |
64 | #include "port-bonding.h" | |
f4f98a38 | 65 | #include "port-ethernet.h" |
67d3fef1 | 66 | #include "port-veth.h" |
c464b5d1 | 67 | #include "port-vlan.h" |
89f8f6af | 68 | |
c464b5d1 | 69 | #define NW_PORT_TYPE(port) (port->type) |
9e8af30e | 70 | |
ff886975 MT |
71 | struct nw_port { |
72 | nw_daemon* daemon; | |
73 | int nrefs; | |
74 | ||
75 | // Link | |
76 | nw_link* link; | |
77 | ||
c464b5d1 | 78 | const nw_port_type_t* type; |
416ba6cd | 79 | char name[IFNAMSIZ]; |
ff886975 MT |
80 | |
81 | // Configuration | |
82 | nw_config *config; | |
83 | ||
84 | // Common attributes | |
85 | nw_address_t address; | |
86 | ||
95c5dca2 MT |
87 | // Bonding Settings |
88 | struct nw_port_bonding bonding; | |
89 | ||
f4f98a38 MT |
90 | // Ethernet Settings |
91 | struct nw_port_ethernet ethernet; | |
92 | ||
67d3fef1 MT |
93 | // VETH Settings |
94 | struct nw_port_veth veth; | |
95 | ||
ff886975 | 96 | // VLAN settings |
4d6ac814 | 97 | struct nw_port_vlan vlan; |
ff886975 MT |
98 | }; |
99 | ||
06bc93d3 | 100 | int nw_port_create(nw_port** port, nw_daemon* daemon, |
c464b5d1 | 101 | const nw_port_type_id_t type, const char* name, nw_config* config); |
25808f65 | 102 | int nw_port_open(nw_port** port, nw_daemon* daemon, const char* name, FILE* f); |
abeab069 | 103 | |
2361667e MT |
104 | nw_port* nw_port_ref(nw_port* port); |
105 | nw_port* nw_port_unref(nw_port* port); | |
abeab069 | 106 | |
c403eb4c MT |
107 | int nw_port_destroy(nw_port* port); |
108 | int __nw_port_drop_port(nw_daemon* daemon, nw_port* port, void* data); | |
109 | ||
605e975f MT |
110 | int nw_port_save(nw_port* port); |
111 | ||
2361667e | 112 | const char* nw_port_name(nw_port* port); |
abeab069 | 113 | |
2361667e | 114 | char* nw_port_bus_path(nw_port* port); |
7297ba7f | 115 | |
611d4aca MT |
116 | int __nw_port_set_link(nw_daemon* daemon, nw_port* port, void* data); |
117 | int __nw_port_drop_link(nw_daemon* daemon, nw_port* port, void* data); | |
118 | ||
2361667e | 119 | const nw_address_t* nw_port_get_address(nw_port* port); |
4a383286 | 120 | |
5a5c346c MT |
121 | nw_port* nw_port_get_parent_port(nw_port* port); |
122 | ||
b9769b09 MT |
123 | int nw_port_reconfigure(nw_port* port); |
124 | ||
20375a08 MT |
125 | int nw_port_has_carrier(nw_port* port); |
126 | ||
c464b5d1 | 127 | int nw_port_check_type(nw_port* port, const nw_port_type_id_t type); |
ff886975 | 128 | |
15240e08 MT |
129 | // Stats |
130 | const struct rtnl_link_stats64* nw_port_get_stats64(nw_port* port); | |
131 | int __nw_port_update_stats(nw_daemon* daemon, nw_port* port, void* data); | |
132 | int nw_port_update_stats(nw_port* port); | |
133 | ||
e9b0614e MT |
134 | // JSON |
135 | int nw_port_to_json(nw_port* port, struct json_object** object); | |
136 | ||
abeab069 | 137 | #endif /* NETWORKD_PORT_H */ |