src/networkd/port-bus.h \
src/networkd/port-dummy.c \
src/networkd/port-dummy.h \
+ src/networkd/port-veth.c \
+ src/networkd/port-veth.h \
src/networkd/port-vlan.c \
src/networkd/port-vlan.h \
src/networkd/stats-collector.c \
--- /dev/null
+/*#############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2023 IPFire Network Development Team #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see <http://www.gnu.org/licenses/>. #
+# #
+#############################################################################*/
+
+#include <linux/veth.h>
+
+#include "json.h"
+#include "port.h"
+#include "port-veth.h"
+
+static int nw_port_veth_setup(nw_port* port) {
+ int r;
+
+ // Peer
+ r = NW_CONFIG_OPTION_STRING(port->config, "VETH_PEER", &port->veth.peer);
+ if (r < 0)
+ return 1;
+
+ return 0;
+}
+
+static int nw_port_veth_create_link(nw_port* port, sd_netlink_message* m) {
+ int r;
+
+ // Open the container
+ r = sd_netlink_message_open_container(m, VETH_INFO_PEER);
+ if (r < 0)
+ return r;
+
+ // Set VETH Peer
+ r = sd_netlink_message_append_string(m, IFLA_VLAN_ID, port->veth.peer);
+ if (r < 0)
+ return r;
+
+ // Close the container
+ r = sd_netlink_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+static int nw_port_veth_to_json(nw_port* port, struct json_object* o) {
+ int r;
+
+ // Add the VETH Peer
+ r = json_object_add_string(o, "VETHPeer", port->veth.peer);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+const nw_port_type_t nw_port_type_veth = {
+ .kind = "veth",
+
+ // Configuration
+ .setup = nw_port_veth_setup,
+
+ // Link
+ .create_link = nw_port_veth_create_link,
+
+ // JSON
+ .to_json = nw_port_veth_to_json,
+};
--- /dev/null
+/*#############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2023 IPFire Network Development Team #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see <http://www.gnu.org/licenses/>. #
+# #
+#############################################################################*/
+
+#ifndef NETWORKD_PORT_VETH_H
+#define NETWORKD_PORT_VETH_H
+
+#include "port.h"
+
+// Maximum length of the peer name
+#define NW_VETH_PEER_MAX 64
+
+struct nw_port_veth {
+ char peer[NW_VETH_PEER_MAX];
+};
+
+extern const nw_port_type_t nw_port_type_veth;
+
+#endif /* NETWORKD_PORT_VETH_H */
#include "port.h"
#include "port-bonding.h"
#include "port-dummy.h"
+#include "port-veth.h"
#include "port-vlan.h"
#include "stats-collector.h"
#include "string.h"
static const nw_string_table_t nw_port_type_id[] = {
{ NW_PORT_BONDING, "bonding" },
{ NW_PORT_DUMMY, "dummy" },
+ { NW_PORT_VETH, "veth", },
{ NW_PORT_VLAN, "vlan" },
{ -1, NULL },
};
p->type = &nw_port_type_dummy;
break;
+ case NW_PORT_VETH:
+ p->type = &nw_port_type_veth;
+
case NW_PORT_VLAN:
p->type = &nw_port_type_vlan;
break;
case NW_PORT_BONDING:
case NW_PORT_DUMMY:
+ case NW_PORT_VETH:
break;
}
typedef enum nw_port_type_id {
NW_PORT_BONDING,
NW_PORT_DUMMY,
+ NW_PORT_VETH,
NW_PORT_VLAN,
} nw_port_type_id_t;
#include "daemon.h"
#include "json.h"
#include "port-bonding.h"
+#include "port-veth.h"
#include "port-vlan.h"
#define NW_PORT_TYPE(port) (port->type)
// Bonding Settings
struct nw_port_bonding bonding;
+ // VETH Settings
+ struct nw_port_veth veth;
+
// VLAN settings
struct nw_port_vlan vlan;
};