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