Skip to content

Commit

Permalink
tap: initial support, no ifcfg yet
Browse files Browse the repository at this point in the history
Merge with existing TUN and change to TUN/TAP (tuntap) when possible
to avoid code duplications.
  • Loading branch information
wipawel committed Mar 14, 2014
1 parent 7f955fa commit 63f35c9
Show file tree
Hide file tree
Showing 26 changed files with 649 additions and 261 deletions.
4 changes: 4 additions & 0 deletions etc/org.opensuse.Network.conf
Expand Up @@ -54,6 +54,10 @@
send_interface="org.opensuse.Network.TUN"/>
<allow send_destination="org.opensuse.Network"
send_interface="org.opensuse.Network.TUN.Factory"/>
<allow send_destination="org.opensuse.Network"
send_interface="org.opensuse.Network.TAP"/>
<allow send_destination="org.opensuse.Network"
send_interface="org.opensuse.Network.TAP.Factory"/>
<allow send_destination="org.opensuse.Network"
send_interface="org.opensuse.Network.OpenVPN"/>
<allow send_destination="org.opensuse.Network"
Expand Down
2 changes: 1 addition & 1 deletion include/Makefile.am
Expand Up @@ -36,7 +36,7 @@ wicked_include_HEADERS = \
wicked/socket.h \
wicked/sysconfig.h \
wicked/system.h \
wicked/tun.h \
wicked/tuntap.h \
wicked/types.h \
wicked/util.h \
wicked/vlan.h \
Expand Down
6 changes: 3 additions & 3 deletions include/wicked/netinfo.h
Expand Up @@ -85,7 +85,7 @@ struct ni_netdev {
ni_macvlan_t * macvlan;
ni_wireless_t * wireless;
ni_openvpn_t * openvpn;
ni_tun_t * tun;
ni_tuntap_t * tuntap;
ni_ppp_t * ppp;
ni_lldp_t * lldp;
ni_dcb_t * dcb;
Expand Down Expand Up @@ -184,7 +184,7 @@ extern ni_macvlan_t * ni_netdev_get_macvlan(ni_netdev_t *);
extern ni_bridge_t * ni_netdev_get_bridge(ni_netdev_t *);
extern ni_wireless_t * ni_netdev_get_wireless(ni_netdev_t *);
extern ni_openvpn_t * ni_netdev_get_openvpn(ni_netdev_t *);
extern ni_tun_t * ni_netdev_get_tun(ni_netdev_t *);
extern ni_tuntap_t * ni_netdev_get_tuntap(ni_netdev_t *);
extern ni_ppp_t * ni_netdev_get_ppp(ni_netdev_t *);
extern ni_lldp_t * ni_netdev_get_lldp(ni_netdev_t *);
extern void ni_netdev_set_bonding(ni_netdev_t *, ni_bonding_t *);
Expand All @@ -196,7 +196,7 @@ extern void ni_netdev_set_infiniband(ni_netdev_t *, ni_infiniband_t *);
extern void ni_netdev_set_link_stats(ni_netdev_t *, ni_link_stats_t *);
extern void ni_netdev_set_wireless(ni_netdev_t *, ni_wireless_t *);
extern void ni_netdev_set_openvpn(ni_netdev_t *, ni_openvpn_t *);
extern void ni_netdev_set_tun(ni_netdev_t *, ni_tun_t *);
extern void ni_netdev_set_tuntap(ni_netdev_t *, ni_tuntap_t *);
extern void ni_netdev_set_ppp(ni_netdev_t *, ni_ppp_t *);
extern void ni_netdev_set_dcb(ni_netdev_t *, ni_dcb_t *);
extern void ni_netdev_set_lldp(ni_netdev_t *, ni_lldp_t *);
Expand Down
1 change: 1 addition & 0 deletions include/wicked/objectmodel.h
Expand Up @@ -79,6 +79,7 @@ extern ni_dbus_class_t * ni_objectmodel_class_new(const char *, const ni_dbus_cl
#define NI_OBJECTMODEL_VLAN_INTERFACE NI_OBJECTMODEL_INTERFACE ".VLAN"
#define NI_OBJECTMODEL_BONDING_INTERFACE NI_OBJECTMODEL_INTERFACE ".Bond"
#define NI_OBJECTMODEL_TUN_INTERFACE NI_OBJECTMODEL_INTERFACE ".TUN"
#define NI_OBJECTMODEL_TAP_INTERFACE NI_OBJECTMODEL_INTERFACE ".TAP"
#define NI_OBJECTMODEL_OPENVPN_INTERFACE NI_OBJECTMODEL_INTERFACE ".OpenVPN"
#define NI_OBJECTMODEL_PPP_INTERFACE NI_OBJECTMODEL_INTERFACE ".PPP"
#define NI_OBJECTMODEL_PPPOE_INTERFACE NI_OBJECTMODEL_INTERFACE ".PPPoE"
Expand Down
10 changes: 7 additions & 3 deletions include/wicked/system.h
Expand Up @@ -59,9 +59,13 @@ extern int ni_system_bond_setup(ni_netconfig_t *nc, ni_netdev_t *,
const ni_bonding_t *);
extern int ni_system_bond_delete(ni_netconfig_t *nc, ni_netdev_t *);
extern int ni_system_bond_shutdown(ni_netdev_t *);
extern int ni_system_tun_create(ni_netconfig_t *, const char *,
const ni_tun_t *cfg, ni_netdev_t **);
extern int ni_system_tun_delete(ni_netdev_t *);
extern int ni_system_tap_change(ni_netconfig_t *, ni_netdev_t *, const ni_netdev_t *);
extern int ni_system_tuntap_create(ni_netconfig_t *, const ni_netdev_t *,
ni_netdev_t **);
extern int ni_system_tuntap_delete(ni_netdev_t *);
extern int ni_system_tap_create(ni_netconfig_t *, const char *,
ni_netdev_t **);
extern int ni_system_tap_delete(ni_netdev_t *);
extern int ni_system_ppp_create(ni_netconfig_t *, const char *,
ni_ppp_t *, ni_netdev_t **);
extern int ni_system_ppp_delete(ni_netdev_t *);
Expand Down
19 changes: 10 additions & 9 deletions include/wicked/tun.h → include/wicked/tuntap.h
@@ -1,5 +1,5 @@
/*
* Routines for handling tun device settings
* Routines for handling tun/tap device settings
*
* Copyright (C) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
*
Expand All @@ -24,20 +24,21 @@
*
*/

#ifndef __WICKED_TUN_H__
#define __WICKED_TUN_H__
#ifndef __WICKED_TUNTAP_H__
#define __WICKED_TUNTAP_H__

#include <wicked/types.h>

struct ni_tun {
struct ni_tuntap {
ni_bool_t persistent; /* Always TRUE */
uid_t owner;
gid_t group;
};

extern ni_tun_t * ni_tun_new(void);
extern void ni_tun_free(ni_tun_t *);
extern const char * ni_tun_validate(const ni_tun_t *);
extern ni_tuntap_t * ni_tuntap_new(void);
extern void ni_tuntap_free(ni_tuntap_t *);
extern const char * ni_tuntap_validate(const ni_tuntap_t *);

extern int ni_tun_parse_sysfs_attrs(const char *, ni_tun_t *);
#endif /* __WICKED_MACVLAN_H__ */
extern int ni_tuntap_parse_sysfs_attrs(const char *, ni_tuntap_t *);

#endif /* __WICKED_TUNTAP_H__ */
2 changes: 1 addition & 1 deletion include/wicked/types.h
Expand Up @@ -33,7 +33,7 @@ typedef struct ni_wireless_scan ni_wireless_scan_t;
typedef struct ni_ethernet ni_ethernet_t;
typedef struct ni_infiniband ni_infiniband_t;
typedef struct ni_openvpn ni_openvpn_t;
typedef struct ni_tun ni_tun_t;
typedef struct ni_tuntap ni_tuntap_t;
typedef struct ni_ppp ni_ppp_t;
typedef struct ni_dcb ni_dcb_t;
typedef struct ni_lldp ni_lldp_t;
Expand Down
8 changes: 8 additions & 0 deletions samples/wicked/tap0.xml
@@ -0,0 +1,8 @@
<interface>
<name>tap0</name>
<tap>
<address>42:42:42:42:42</address>
<owner>0</owner>
<group>0</group>
</tap>
</interface>
2 changes: 0 additions & 2 deletions samples/wicked/tun0.xml
@@ -1,8 +1,6 @@
<interface>
<name>tun0</name>

<tun>
<persistent>true</persistent>
<owner>0</owner>
<group>0</group>
</tun>
Expand Down
2 changes: 1 addition & 1 deletion schema/Makefile.am
Expand Up @@ -20,7 +20,7 @@ wicked_schema_files = \
ppp.xml \
protocol.xml \
types.xml \
tun.xml \
tuntap.xml \
vlan.xml \
wicked.xml \
wireless.xml
Expand Down
26 changes: 3 additions & 23 deletions schema/openvpn.xml
@@ -1,10 +1,12 @@
<!--
-- *** Note: UNDER REWORK -- DO NOT INCLUDE/USE ***
--
-- OpenVPN Tunnel Service definition
--
-- We create a subclass of the tun/tap device class, which supports the OpenVPN
-- DBus interface.
-->
<object-class name="netif-openvpn" base-class="netif-virtual-tunnel"/>
<object-class name="netif-openvpn" base-class="netif-tun"/>

<service name="openvpn" interface="org.opensuse.Network.OpenVPN" object-class="netif-openvpn">
<!-- This is the linkinfo returned in interface reports -->
Expand Down Expand Up @@ -99,12 +101,6 @@
</method>
</service>

<service name="tun" interface="org.opensuse.Network.TUN" object-class="netif-virtual-tunnel">
<method name="deleteDevice">
<!-- no arguments, no return code -->
</method>
</service>

<service name="openvpn-factory" interface="org.opensuse.Network.OpenVPN.Factory" object-class="netif-list">
<!-- "Create" openvpn device.
-- This will create a tunX device and an openvpn config file.
Expand All @@ -122,19 +118,3 @@
</return>
</method>
</service>

<service name="tun-factory" interface="org.opensuse.Network.TUN.Factory" object-class="netif-list">
<define name="linkinfo" class="dict">
<!-- nothing -->
</define>
<method name="newDevice">
<arguments>
<name type="string"/>
<config type="linkinfo"/>
</arguments>
<return>
<string/> <!-- this is really an object handle -->
</return>
</method>
</service>

51 changes: 0 additions & 51 deletions schema/tun.xml

This file was deleted.

94 changes: 94 additions & 0 deletions schema/tuntap.xml
@@ -0,0 +1,94 @@
<!--
tun service definitions
-->
<service name="tun" interface="org.opensuse.Network.TUN" object-class="netif-tun">
<description>
This link-layer service is provided by all TUN devices.

TUN devices can be created through the org.opensuse.Network.TUN.Factory
factory interface.
</description>

<define name="configuration" class="dict">
<owner type="uint32"/>
<group type="uint32"/>
</define>

<!-- The same properties are returned in interface state reports -->
<define name="properties" type="tun:configuration"/>

<method name="changeDevice">
<arguments>
<config type="tun::configuration">
<meta:mapping document-node="/tun" skip-unless-present="true" />
</config>
</arguments>
</method>

<method name="deleteDevice">
<!-- no arguments, no return code -->
</method>
</service>

<service name="tun-factory" interface="org.opensuse.Network.TUN.Factory"
object-class="netif-list">
<method name="newDevice">
<arguments>
<name type="string"/>
<config type="tun:configuration">
<meta:mapping document-node="/tun"/>
</config>
</arguments>
<return>
<!-- this is really an object handle -->
<string/>
</return>
</method>
</service>

<!--
tap service definitions
-->
<service name="tap" interface="org.opensuse.Network.TAP" object-class="netif-tap">
<description>
This link-layer service is provided by all TAP devices.

TAP devices can be created through the org.opensuse.Network.TAP.Factory
factory interface.
</description>

<define name="configuration" class="dict" extends="tun:configuration">
<address type="ethernet-address"/>
</define>

<!-- The same properties are returned in interface state reports -->
<define name="properties" type="tap:configuration"/>

<method name="changeDevice">
<arguments>
<config type="tap:configuration">
<meta:mapping document-node="/tap" skip-unless-present="true" />
</config>
</arguments>
</method>

<method name="deleteDevice">
<!-- no arguments, no return code -->
</method>
</service>

<service name="tap-factory" interface="org.opensuse.Network.TAP.Factory"
object-class="netif-list">
<method name="newDevice">
<arguments>
<name type="string"/>
<config type="tap:configuration">
<meta:mapping document-node="/tap"/>
</config>
</arguments>
<return>
<!-- this is really an object handle -->
<string/>
</return>
</method>
</service>
2 changes: 1 addition & 1 deletion schema/wicked.xml
Expand Up @@ -16,7 +16,7 @@
<include name="infiniband.xml"/>
<include name="interface.xml"/>
<include name="wireless.xml"/>
<include name="tun.xml"/>
<include name="tuntap.xml"/>
<include name="ppp.xml"/>
<include name="firewall.xml"/>
<include name="addrconf.xml"/>
Expand Down
4 changes: 2 additions & 2 deletions src/Makefile.am
Expand Up @@ -93,7 +93,7 @@ libwicked_la_SOURCES = \
sysconfig.c \
sysfs.c \
timer.c \
tun.c \
tuntap.c \
update.c \
util.c \
vlan.c \
Expand Down Expand Up @@ -126,7 +126,7 @@ libwicked_dbus_objects_la_SOURCES = \
dbus-objects/openvpn.c \
dbus-objects/ppp.c \
dbus-objects/state.c \
dbus-objects/tun.c \
dbus-objects/tuntap.c \
dbus-objects/vlan.c \
dbus-objects/wireless.c

Expand Down
4 changes: 2 additions & 2 deletions src/dbus-objects/interface.c
Expand Up @@ -109,7 +109,7 @@ ni_objectmodel_register_netif_services(void)
ni_objectmodel_register_netif_service(NI_IFTYPE_BRIDGE, &ni_objectmodel_bridge_service);
ni_objectmodel_register_netif_service(NI_IFTYPE_WIRELESS, &ni_objectmodel_wireless_service);
ni_objectmodel_register_netif_service(NI_IFTYPE_TUN, &ni_objectmodel_tun_service);
ni_objectmodel_register_netif_service(NI_IFTYPE_TUN, &ni_objectmodel_openvpn_service);
ni_objectmodel_register_netif_service(NI_IFTYPE_TAP, &ni_objectmodel_tap_service);
ni_objectmodel_register_netif_service(NI_IFTYPE_INFINIBAND, &ni_objectmodel_ibparent_service);
ni_objectmodel_register_netif_service(NI_IFTYPE_INFINIBAND_CHILD, &ni_objectmodel_ibchild_service);

Expand All @@ -119,7 +119,7 @@ ni_objectmodel_register_netif_services(void)
ni_objectmodel_register_netif_factory_service(&ni_objectmodel_macvlan_factory_service);
ni_objectmodel_register_netif_factory_service(&ni_objectmodel_dummy_factory_service);
ni_objectmodel_register_netif_factory_service(&ni_objectmodel_tun_factory_service);
ni_objectmodel_register_netif_factory_service(&ni_objectmodel_openvpn_factory_service);
ni_objectmodel_register_netif_factory_service(&ni_objectmodel_tap_factory_service);
ni_objectmodel_register_netif_factory_service(&ni_objectmodel_ibchild_factory_service);

/* Register all builtin naming services */
Expand Down
4 changes: 2 additions & 2 deletions src/dbus-objects/model.h
Expand Up @@ -97,12 +97,12 @@ extern ni_dbus_service_t ni_objectmodel_dummy_service;
extern ni_dbus_service_t ni_objectmodel_dummy_factory_service;
extern ni_dbus_service_t ni_objectmodel_tun_service;
extern ni_dbus_service_t ni_objectmodel_tun_factory_service;
extern ni_dbus_service_t ni_objectmodel_tap_service;
extern ni_dbus_service_t ni_objectmodel_tap_factory_service;
extern ni_dbus_service_t ni_objectmodel_ppp_base_service;
extern ni_dbus_service_t ni_objectmodel_ppp_service;
extern ni_dbus_service_t ni_objectmodel_ppp_factory_service;
extern ni_dbus_service_t ni_objectmodel_pppoe_factory_service;
extern ni_dbus_service_t ni_objectmodel_openvpn_service;
extern ni_dbus_service_t ni_objectmodel_openvpn_factory_service;
extern ni_dbus_service_t ni_objectmodel_ibparent_service;
extern ni_dbus_service_t ni_objectmodel_ibchild_service;
extern ni_dbus_service_t ni_objectmodel_ibchild_factory_service;
Expand Down

0 comments on commit 63f35c9

Please sign in to comment.