]> git.ipfire.org Git - people/ms/network.git/blame - src/networkd/port.h
ports: Add support for VETH
[people/ms/network.git] / src / networkd / port.h
CommitLineData
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 34typedef struct nw_port nw_port;
abeab069 35
c464b5d1 36typedef 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
43typedef 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
75struct 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 101int 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 103int nw_port_open(nw_port** port, nw_daemon* daemon, const char* name);
abeab069 104
2361667e
MT
105nw_port* nw_port_ref(nw_port* port);
106nw_port* nw_port_unref(nw_port* port);
abeab069 107
c403eb4c
MT
108int nw_port_destroy(nw_port* port);
109int __nw_port_drop_port(nw_daemon* daemon, nw_port* port, void* data);
110
605e975f
MT
111int nw_port_save(nw_port* port);
112
2361667e 113const char* nw_port_name(nw_port* port);
abeab069 114
2361667e 115char* nw_port_bus_path(nw_port* port);
7297ba7f 116
611d4aca
MT
117int __nw_port_set_link(nw_daemon* daemon, nw_port* port, void* data);
118int __nw_port_drop_link(nw_daemon* daemon, nw_port* port, void* data);
119
2361667e 120const nw_address_t* nw_port_get_address(nw_port* port);
4a383286 121
5a5c346c
MT
122nw_port* nw_port_get_parent_port(nw_port* port);
123
b9769b09
MT
124int nw_port_reconfigure(nw_port* port);
125
20375a08
MT
126int nw_port_has_carrier(nw_port* port);
127
c464b5d1 128int nw_port_check_type(nw_port* port, const nw_port_type_id_t type);
ff886975 129
15240e08
MT
130// Stats
131const struct rtnl_link_stats64* nw_port_get_stats64(nw_port* port);
132int __nw_port_update_stats(nw_daemon* daemon, nw_port* port, void* data);
133int nw_port_update_stats(nw_port* port);
134
e9b0614e
MT
135// JSON
136int nw_port_to_json(nw_port* port, struct json_object** object);
137
abeab069 138#endif /* NETWORKD_PORT_H */