]>
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 MT |
36 | typedef enum nw_port_type_id { |
37 | NW_PORT_UNKNOWN = 0, | |
38 | NW_PORT_BONDING, | |
39 | NW_PORT_DUMMY, | |
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); | |
ff886975 | 52 | |
c464b5d1 MT |
53 | // Get Parent Port |
54 | nw_port* (*get_parent_port)(nw_port* port); | |
240e331b | 55 | |
c464b5d1 MT |
56 | // Link |
57 | int (*create_link)(nw_port* port, sd_netlink_message* message); | |
58 | int (*destroy_link)(nw_port* port); | |
e9b0614e | 59 | |
c464b5d1 MT |
60 | // JSON |
61 | int (*to_json)(nw_port* port, struct json_object* object); | |
62 | } nw_port_type_t; | |
63 | ||
64 | #include "address.h" | |
65 | #include "config.h" | |
66 | #include "daemon.h" | |
67 | #include "json.h" | |
68 | #include "port-bonding.h" | |
69 | #include "port-vlan.h" | |
89f8f6af | 70 | |
c464b5d1 | 71 | #define NW_PORT_TYPE(port) (port->type) |
9e8af30e | 72 | |
ff886975 MT |
73 | struct nw_port { |
74 | nw_daemon* daemon; | |
75 | int nrefs; | |
76 | ||
77 | // Link | |
78 | nw_link* link; | |
79 | ||
c464b5d1 | 80 | const nw_port_type_t* type; |
ff886975 MT |
81 | char name[IF_NAMESIZE]; |
82 | ||
83 | // Configuration | |
84 | nw_config *config; | |
85 | ||
86 | // Common attributes | |
87 | nw_address_t address; | |
88 | ||
95c5dca2 MT |
89 | // Bonding Settings |
90 | struct nw_port_bonding bonding; | |
91 | ||
ff886975 | 92 | // VLAN settings |
4d6ac814 | 93 | struct nw_port_vlan vlan; |
ff886975 MT |
94 | }; |
95 | ||
06bc93d3 | 96 | int nw_port_create(nw_port** port, nw_daemon* daemon, |
c464b5d1 | 97 | const nw_port_type_id_t type, const char* name, nw_config* config); |
06bc93d3 MT |
98 | int nw_port_create_from_config(nw_port** port, nw_daemon* daemon, |
99 | const char* name, const char* path); | |
abeab069 | 100 | |
2361667e MT |
101 | nw_port* nw_port_ref(nw_port* port); |
102 | nw_port* nw_port_unref(nw_port* port); | |
abeab069 | 103 | |
c403eb4c MT |
104 | int nw_port_destroy(nw_port* port); |
105 | int __nw_port_drop_port(nw_daemon* daemon, nw_port* port, void* data); | |
106 | ||
605e975f MT |
107 | int nw_port_save(nw_port* port); |
108 | ||
2361667e | 109 | const char* nw_port_name(nw_port* port); |
abeab069 | 110 | |
2361667e | 111 | char* nw_port_bus_path(nw_port* port); |
7297ba7f | 112 | |
611d4aca MT |
113 | int __nw_port_set_link(nw_daemon* daemon, nw_port* port, void* data); |
114 | int __nw_port_drop_link(nw_daemon* daemon, nw_port* port, void* data); | |
115 | ||
2361667e | 116 | const nw_address_t* nw_port_get_address(nw_port* port); |
4a383286 | 117 | |
5a5c346c MT |
118 | nw_port* nw_port_get_parent_port(nw_port* port); |
119 | ||
b9769b09 MT |
120 | int nw_port_reconfigure(nw_port* port); |
121 | ||
20375a08 MT |
122 | int nw_port_has_carrier(nw_port* port); |
123 | ||
c464b5d1 | 124 | int nw_port_check_type(nw_port* port, const nw_port_type_id_t type); |
ff886975 | 125 | |
15240e08 MT |
126 | // Stats |
127 | const struct rtnl_link_stats64* nw_port_get_stats64(nw_port* port); | |
128 | int __nw_port_update_stats(nw_daemon* daemon, nw_port* port, void* data); | |
129 | int nw_port_update_stats(nw_port* port); | |
130 | ||
e9b0614e MT |
131 | // JSON |
132 | int nw_port_to_json(nw_port* port, struct json_object** object); | |
133 | ||
abeab069 | 134 | #endif /* NETWORKD_PORT_H */ |