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