mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-07 18:00:30 +01:00
platform: add SIT links support
This commit is contained in:
parent
91bf0efaa7
commit
0754280b9f
6 changed files with 248 additions and 0 deletions
|
|
@ -112,6 +112,7 @@ typedef enum {
|
|||
NM_LINK_TYPE_MACVLAN,
|
||||
NM_LINK_TYPE_MACVTAP,
|
||||
NM_LINK_TYPE_OPENVSWITCH,
|
||||
NM_LINK_TYPE_SIT,
|
||||
NM_LINK_TYPE_TAP,
|
||||
NM_LINK_TYPE_TUN,
|
||||
NM_LINK_TYPE_VETH,
|
||||
|
|
@ -136,6 +137,7 @@ typedef enum {
|
|||
NMP_OBJECT_TYPE_LNK_GRE,
|
||||
NMP_OBJECT_TYPE_LNK_INFINIBAND,
|
||||
NMP_OBJECT_TYPE_LNK_MACVLAN,
|
||||
NMP_OBJECT_TYPE_LNK_SIT,
|
||||
NMP_OBJECT_TYPE_LNK_VLAN,
|
||||
NMP_OBJECT_TYPE_LNK_VXLAN,
|
||||
|
||||
|
|
|
|||
|
|
@ -86,6 +86,19 @@
|
|||
#define IFLA_MACVLAN_FLAGS 2
|
||||
#define __IFLA_MACVLAN_MAX 3
|
||||
|
||||
#define IFLA_IPTUN_LINK 1
|
||||
#define IFLA_IPTUN_LOCAL 2
|
||||
#define IFLA_IPTUN_REMOTE 3
|
||||
#define IFLA_IPTUN_TTL 4
|
||||
#define IFLA_IPTUN_TOS 5
|
||||
#define IFLA_IPTUN_FLAGS 8
|
||||
#define IFLA_IPTUN_PROTO 9
|
||||
#define IFLA_IPTUN_PMTUDISC 10
|
||||
#define __IFLA_IPTUN_MAX 19
|
||||
#ifndef IFLA_IPTUN_MAX
|
||||
#define IFLA_IPTUN_MAX (__IFLA_IPTUN_MAX - 1)
|
||||
#endif
|
||||
|
||||
#ifndef MACVLAN_FLAG_NOPROMISC
|
||||
#define MACVLAN_FLAG_NOPROMISC 1
|
||||
#endif
|
||||
|
|
@ -320,6 +333,7 @@ static const LinkDesc linktypes[] = {
|
|||
{ NM_LINK_TYPE_MACVLAN, "macvlan", "macvlan", NULL },
|
||||
{ NM_LINK_TYPE_MACVTAP, "macvtap", "macvtap", NULL },
|
||||
{ NM_LINK_TYPE_OPENVSWITCH, "openvswitch", "openvswitch", NULL },
|
||||
{ NM_LINK_TYPE_SIT, "sit", "sit", NULL },
|
||||
{ NM_LINK_TYPE_TAP, "tap", NULL, NULL },
|
||||
{ NM_LINK_TYPE_TUN, "tun", NULL, NULL },
|
||||
{ NM_LINK_TYPE_VETH, "veth", "veth", NULL },
|
||||
|
|
@ -613,6 +627,8 @@ _linktype_get_type (NMPlatform *platform,
|
|||
return NM_LINK_TYPE_LOOPBACK;
|
||||
else if (arptype == ARPHRD_INFINIBAND)
|
||||
return NM_LINK_TYPE_INFINIBAND;
|
||||
else if (arptype == ARPHRD_SIT)
|
||||
return NM_LINK_TYPE_SIT;
|
||||
|
||||
if (ifname) {
|
||||
gs_free char *driver = NULL;
|
||||
|
|
@ -950,6 +966,48 @@ _parse_lnk_macvlan (const char *kind, struct nlattr *info_data)
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static NMPObject *
|
||||
_parse_lnk_sit (const char *kind, struct nlattr *info_data)
|
||||
{
|
||||
static struct nla_policy policy[IFLA_IPTUN_MAX + 1] = {
|
||||
[IFLA_IPTUN_LINK] = { .type = NLA_U32 },
|
||||
[IFLA_IPTUN_LOCAL] = { .type = NLA_U32 },
|
||||
[IFLA_IPTUN_REMOTE] = { .type = NLA_U32 },
|
||||
[IFLA_IPTUN_TTL] = { .type = NLA_U8 },
|
||||
[IFLA_IPTUN_TOS] = { .type = NLA_U8 },
|
||||
[IFLA_IPTUN_PMTUDISC] = { .type = NLA_U8 },
|
||||
[IFLA_IPTUN_FLAGS] = { .type = NLA_U16 },
|
||||
[IFLA_IPTUN_PROTO] = { .type = NLA_U8 },
|
||||
};
|
||||
struct nlattr *tb[IFLA_IPTUN_MAX + 1];
|
||||
int err;
|
||||
NMPObject *obj;
|
||||
NMPlatformLnkSit *props;
|
||||
|
||||
if (!info_data || g_strcmp0 (kind, "sit"))
|
||||
return NULL;
|
||||
|
||||
err = nla_parse_nested (tb, IFLA_IPTUN_MAX, info_data, policy);
|
||||
if (err < 0)
|
||||
return NULL;
|
||||
|
||||
obj = nmp_object_new (NMP_OBJECT_TYPE_LNK_SIT, NULL);
|
||||
props = &obj->lnk_sit;
|
||||
|
||||
props->parent_ifindex = tb[IFLA_IPTUN_LINK] ? nla_get_u32 (tb[IFLA_IPTUN_LINK]) : 0;
|
||||
props->local = tb[IFLA_IPTUN_LOCAL] ? nla_get_u32 (tb[IFLA_IPTUN_LOCAL]) : 0;
|
||||
props->remote = tb[IFLA_IPTUN_REMOTE] ? nla_get_u32 (tb[IFLA_IPTUN_REMOTE]) : 0;
|
||||
props->tos = tb[IFLA_IPTUN_TOS] ? nla_get_u8 (tb[IFLA_IPTUN_TOS]) : 0;
|
||||
props->ttl = tb[IFLA_IPTUN_TTL] ? nla_get_u8 (tb[IFLA_IPTUN_TTL]) : 0;
|
||||
props->path_mtu_discovery = !tb[IFLA_IPTUN_PMTUDISC] || !!nla_get_u8 (tb[IFLA_IPTUN_PMTUDISC]);
|
||||
props->flags = tb[IFLA_IPTUN_FLAGS] ? nla_get_u16 (tb[IFLA_IPTUN_FLAGS]) : 0;
|
||||
props->proto = tb[IFLA_IPTUN_PROTO] ? nla_get_u8 (tb[IFLA_IPTUN_PROTO]) : 0;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static gboolean
|
||||
_vlan_qos_mapping_from_nla (struct nlattr *nlattr,
|
||||
const NMVlanQosMapping **out_map,
|
||||
|
|
@ -1330,6 +1388,9 @@ _new_from_nl_link (NMPlatform *platform, const NMPCache *cache, struct nlmsghdr
|
|||
case NM_LINK_TYPE_MACVLAN:
|
||||
lnk_data = _parse_lnk_macvlan (nl_info_kind, nl_info_data);
|
||||
break;
|
||||
case NM_LINK_TYPE_SIT:
|
||||
lnk_data = _parse_lnk_sit (nl_info_kind, nl_info_data);
|
||||
break;
|
||||
case NM_LINK_TYPE_VLAN:
|
||||
lnk_data = _parse_lnk_vlan (nl_info_kind, nl_info_data);
|
||||
break;
|
||||
|
|
@ -2738,6 +2799,7 @@ cache_pre_hook (NMPCache *cache, const NMPObject *old, const NMPObject *new, NMP
|
|||
case NM_LINK_TYPE_GRE:
|
||||
case NM_LINK_TYPE_INFINIBAND:
|
||||
case NM_LINK_TYPE_MACVLAN:
|
||||
case NM_LINK_TYPE_SIT:
|
||||
case NM_LINK_TYPE_VLAN:
|
||||
case NM_LINK_TYPE_VXLAN:
|
||||
delayed_action_schedule (platform,
|
||||
|
|
@ -4091,6 +4153,57 @@ nla_put_failure:
|
|||
g_return_val_if_reached (FALSE);
|
||||
}
|
||||
|
||||
static int
|
||||
link_sit_add (NMPlatform *platform,
|
||||
const char *name,
|
||||
NMPlatformLnkSit *props,
|
||||
NMPlatformLink *out_link)
|
||||
{
|
||||
nm_auto_nlmsg struct nl_msg *nlmsg = NULL;
|
||||
struct nlattr *info;
|
||||
struct nlattr *data;
|
||||
char buffer[INET_ADDRSTRLEN];
|
||||
|
||||
_LOGD (LOG_FMT_IP_TUNNEL,
|
||||
"sit",
|
||||
name,
|
||||
props->parent_ifindex,
|
||||
nm_utils_inet4_ntop (props->local, NULL),
|
||||
nm_utils_inet4_ntop (props->remote, buffer));
|
||||
|
||||
nlmsg = _nl_msg_new_link (RTM_NEWLINK,
|
||||
NLM_F_CREATE,
|
||||
0,
|
||||
name,
|
||||
0,
|
||||
0);
|
||||
if (!nlmsg)
|
||||
return FALSE;
|
||||
|
||||
if (!(info = nla_nest_start (nlmsg, IFLA_LINKINFO)))
|
||||
goto nla_put_failure;
|
||||
|
||||
NLA_PUT_STRING (nlmsg, IFLA_INFO_KIND, "sit");
|
||||
|
||||
if (!(data = nla_nest_start (nlmsg, IFLA_INFO_DATA)))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (props->parent_ifindex)
|
||||
NLA_PUT_U32 (nlmsg, IFLA_IPTUN_LINK, props->parent_ifindex);
|
||||
NLA_PUT_U32 (nlmsg, IFLA_IPTUN_LOCAL, props->local);
|
||||
NLA_PUT_U32 (nlmsg, IFLA_IPTUN_REMOTE, props->remote);
|
||||
NLA_PUT_U8 (nlmsg, IFLA_IPTUN_TTL, props->ttl);
|
||||
NLA_PUT_U8 (nlmsg, IFLA_IPTUN_TOS, props->tos);
|
||||
NLA_PUT_U8 (nlmsg, IFLA_IPTUN_PMTUDISC, !!props->path_mtu_discovery);
|
||||
|
||||
nla_nest_end (nlmsg, data);
|
||||
nla_nest_end (nlmsg, info);
|
||||
|
||||
return do_add_link_with_lookup (platform, NM_LINK_TYPE_SIT, name, nlmsg, out_link);
|
||||
nla_put_failure:
|
||||
g_return_val_if_reached (FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
_vlan_change_vlan_qos_mapping_create (gboolean is_ingress_map,
|
||||
gboolean reset_all,
|
||||
|
|
@ -5545,6 +5658,7 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
|
|||
platform_class->mesh_set_ssid = mesh_set_ssid;
|
||||
|
||||
platform_class->link_gre_add = link_gre_add;
|
||||
platform_class->link_sit_add = link_sit_add;
|
||||
|
||||
platform_class->ip4_address_get = ip4_address_get;
|
||||
platform_class->ip6_address_get = ip6_address_get;
|
||||
|
|
|
|||
|
|
@ -1435,6 +1435,12 @@ nm_platform_link_get_lnk_macvlan (NMPlatform *self, int ifindex, const NMPlatfor
|
|||
return _link_get_lnk (self, ifindex, NM_LINK_TYPE_MACVLAN, out_link);
|
||||
}
|
||||
|
||||
const NMPlatformLnkSit *
|
||||
nm_platform_link_get_lnk_sit (NMPlatform *self, int ifindex, const NMPlatformLink **out_link)
|
||||
{
|
||||
return _link_get_lnk (self, ifindex, NM_LINK_TYPE_SIT, out_link);
|
||||
}
|
||||
|
||||
const NMPlatformLnkVlan *
|
||||
nm_platform_link_get_lnk_vlan (NMPlatform *self, int ifindex, const NMPlatformLink **out_link)
|
||||
{
|
||||
|
|
@ -1847,6 +1853,45 @@ nm_platform_infiniband_get_properties (NMPlatform *self,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_platform_sit_add:
|
||||
* @self: platform instance
|
||||
* @name: name of the new interface
|
||||
* @props: interface properties
|
||||
* @out_link: on success, the link object
|
||||
*
|
||||
* Create a software SIT device.
|
||||
*/
|
||||
NMPlatformError
|
||||
nm_platform_link_sit_add (NMPlatform *self,
|
||||
const char *name,
|
||||
NMPlatformLnkSit *props,
|
||||
NMPlatformLink *out_link)
|
||||
{
|
||||
NMPlatformError plerr;
|
||||
char buffer[INET_ADDRSTRLEN];
|
||||
|
||||
_CHECK_SELF (self, klass, NM_PLATFORM_ERROR_BUG);
|
||||
|
||||
g_return_val_if_fail (props, NM_PLATFORM_ERROR_BUG);
|
||||
g_return_val_if_fail (name, NM_PLATFORM_ERROR_BUG);
|
||||
|
||||
plerr = _link_add_check_existing (self, name, NM_LINK_TYPE_SIT, out_link);
|
||||
if (plerr != NM_PLATFORM_ERROR_SUCCESS)
|
||||
return plerr;
|
||||
|
||||
_LOGD (LOG_FMT_IP_TUNNEL,
|
||||
"sit",
|
||||
name,
|
||||
props->parent_ifindex,
|
||||
nm_utils_inet4_ntop (props->local, NULL),
|
||||
nm_utils_inet4_ntop (props->remote, buffer));
|
||||
|
||||
if (!klass->link_sit_add (self, name, props, out_link))
|
||||
return NM_PLATFORM_ERROR_UNSPECIFIED;
|
||||
return NM_PLATFORM_ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_platform_veth_get_properties (NMPlatform *self, int ifindex, int *out_peer_ifindex)
|
||||
{
|
||||
|
|
@ -2860,6 +2905,44 @@ nm_platform_lnk_macvlan_to_string (const NMPlatformLnkMacvlan *lnk, char *buf, g
|
|||
return buf;
|
||||
}
|
||||
|
||||
const char *
|
||||
nm_platform_lnk_sit_to_string (const NMPlatformLnkSit *lnk, char *buf, gsize len)
|
||||
{
|
||||
char str_local[30];
|
||||
char str_local1[NM_UTILS_INET_ADDRSTRLEN];
|
||||
char str_remote[30];
|
||||
char str_remote1[NM_UTILS_INET_ADDRSTRLEN];
|
||||
char str_ttl[30];
|
||||
char str_tos[30];
|
||||
char str_flags[30];
|
||||
char str_proto[30];
|
||||
char str_parent_ifindex[30];
|
||||
|
||||
if (!nm_utils_to_string_buffer_init_null (lnk, &buf, &len))
|
||||
return buf;
|
||||
|
||||
g_snprintf (buf, len,
|
||||
"sit"
|
||||
"%s" /* remote */
|
||||
"%s" /* local */
|
||||
"%s" /* parent_ifindex */
|
||||
"%s" /* ttl */
|
||||
"%s" /* tos */
|
||||
"%s" /* path_mtu_discovery */
|
||||
"%s" /* flags */
|
||||
"%s" /* proto */
|
||||
"",
|
||||
lnk->remote ? nm_sprintf_buf (str_remote, " remote %s", nm_utils_inet4_ntop (lnk->remote, str_remote1)) : "",
|
||||
lnk->local ? nm_sprintf_buf (str_local, " local %s", nm_utils_inet4_ntop (lnk->local, str_local1)) : "",
|
||||
lnk->parent_ifindex ? nm_sprintf_buf (str_parent_ifindex, " dev %d", lnk->parent_ifindex) : "",
|
||||
lnk->ttl ? nm_sprintf_buf (str_ttl, " ttl %u", lnk->ttl) : " ttl inherit",
|
||||
lnk->tos ? (lnk->tos == 1 ? " tos inherit" : nm_sprintf_buf (str_tos, " tos 0x%x", lnk->tos)) : "",
|
||||
lnk->path_mtu_discovery ? "" : " nopmtudisc",
|
||||
lnk->flags ? nm_sprintf_buf (str_flags, " flags 0x%x", lnk->flags) : "",
|
||||
lnk->proto ? nm_sprintf_buf (str_proto, " proto 0x%x", lnk->proto) : "");
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *
|
||||
nm_platform_lnk_vlan_to_string (const NMPlatformLnkVlan *lnk, char *buf, gsize len)
|
||||
{
|
||||
|
|
@ -3410,6 +3493,21 @@ nm_platform_lnk_macvlan_cmp (const NMPlatformLnkMacvlan *a, const NMPlatformLnkM
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nm_platform_lnk_sit_cmp (const NMPlatformLnkSit *a, const NMPlatformLnkSit *b)
|
||||
{
|
||||
_CMP_SELF (a, b);
|
||||
_CMP_FIELD (a, b, parent_ifindex);
|
||||
_CMP_FIELD (a, b, local);
|
||||
_CMP_FIELD (a, b, remote);
|
||||
_CMP_FIELD (a, b, ttl);
|
||||
_CMP_FIELD (a, b, tos);
|
||||
_CMP_FIELD_BOOL (a, b, path_mtu_discovery);
|
||||
_CMP_FIELD (a, b, flags);
|
||||
_CMP_FIELD (a, b, proto);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nm_platform_lnk_vlan_cmp (const NMPlatformLnkVlan *a, const NMPlatformLnkVlan *b)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -383,6 +383,17 @@ typedef struct {
|
|||
gboolean no_promisc;
|
||||
} NMPlatformLnkMacvlan;
|
||||
|
||||
typedef struct {
|
||||
int parent_ifindex;
|
||||
in_addr_t local;
|
||||
in_addr_t remote;
|
||||
guint8 ttl;
|
||||
guint8 tos;
|
||||
gboolean path_mtu_discovery;
|
||||
guint16 flags;
|
||||
guint8 proto;
|
||||
} NMPlatformLnkSit;
|
||||
|
||||
typedef struct {
|
||||
/* rtnl_link_vlan_get_id(), IFLA_VLAN_ID */
|
||||
guint16 id;
|
||||
|
|
@ -529,6 +540,8 @@ typedef struct {
|
|||
|
||||
gboolean (*link_gre_add) (NMPlatform *, const char *name, NMPlatformLnkGre *props,
|
||||
NMPlatformLink *out_link);
|
||||
gboolean (*link_sit_add) (NMPlatform *, const char *name, NMPlatformLnkSit *props,
|
||||
NMPlatformLink *out_link);
|
||||
|
||||
gboolean (*infiniband_partition_add) (NMPlatform *, int parent, int p_key, NMPlatformLink *out_link);
|
||||
|
||||
|
|
@ -720,6 +733,7 @@ const NMPObject *nm_platform_link_get_lnk (NMPlatform *self, int ifindex, NMLink
|
|||
const NMPlatformLnkGre *nm_platform_link_get_lnk_gre (NMPlatform *self, int ifindex, const NMPlatformLink **out_link);
|
||||
const NMPlatformLnkInfiniband *nm_platform_link_get_lnk_infiniband (NMPlatform *self, int ifindex, const NMPlatformLink **out_link);
|
||||
const NMPlatformLnkMacvlan *nm_platform_link_get_lnk_macvlan (NMPlatform *self, int ifindex, const NMPlatformLink **out_link);
|
||||
const NMPlatformLnkSit *nm_platform_link_get_lnk_sit (NMPlatform *self, int ifindex, const NMPlatformLink **out_link);
|
||||
const NMPlatformLnkVlan *nm_platform_link_get_lnk_vlan (NMPlatform *self, int ifindex, const NMPlatformLink **out_link);
|
||||
const NMPlatformLnkVxlan *nm_platform_link_get_lnk_vxlan (NMPlatform *self, int ifindex, const NMPlatformLink **out_link);
|
||||
|
||||
|
|
@ -771,6 +785,8 @@ const NMPlatformIP4Address *nm_platform_ip4_address_get (NMPlatform *self, int i
|
|||
|
||||
NMPlatformError nm_platform_link_gre_add (NMPlatform *self, const char *name, NMPlatformLnkGre *props,
|
||||
NMPlatformLink *out_link);
|
||||
NMPlatformError nm_platform_link_sit_add (NMPlatform *self, const char *name, NMPlatformLnkSit *props,
|
||||
NMPlatformLink *out_link);
|
||||
|
||||
const NMPlatformIP6Address *nm_platform_ip6_address_get (NMPlatform *self, int ifindex, struct in6_addr address, int plen);
|
||||
GArray *nm_platform_ip4_address_get_all (NMPlatform *self, int ifindex);
|
||||
|
|
@ -814,6 +830,7 @@ const char *nm_platform_link_to_string (const NMPlatformLink *link, char *buf, g
|
|||
const char *nm_platform_lnk_gre_to_string (const NMPlatformLnkGre *lnk, char *buf, gsize len);
|
||||
const char *nm_platform_lnk_infiniband_to_string (const NMPlatformLnkInfiniband *lnk, char *buf, gsize len);
|
||||
const char *nm_platform_lnk_macvlan_to_string (const NMPlatformLnkMacvlan *lnk, char *buf, gsize len);
|
||||
const char *nm_platform_lnk_sit_to_string (const NMPlatformLnkSit *lnk, char *buf, gsize len);
|
||||
const char *nm_platform_lnk_vlan_to_string (const NMPlatformLnkVlan *lnk, char *buf, gsize len);
|
||||
const char *nm_platform_lnk_vxlan_to_string (const NMPlatformLnkVxlan *lnk, char *buf, gsize len);
|
||||
const char *nm_platform_ip4_address_to_string (const NMPlatformIP4Address *address, char *buf, gsize len);
|
||||
|
|
@ -831,6 +848,7 @@ int nm_platform_link_cmp (const NMPlatformLink *a, const NMPlatformLink *b);
|
|||
int nm_platform_lnk_gre_cmp (const NMPlatformLnkGre *a, const NMPlatformLnkGre *b);
|
||||
int nm_platform_lnk_infiniband_cmp (const NMPlatformLnkInfiniband *a, const NMPlatformLnkInfiniband *b);
|
||||
int nm_platform_lnk_macvlan_cmp (const NMPlatformLnkMacvlan *a, const NMPlatformLnkMacvlan *b);
|
||||
int nm_platform_lnk_sit_cmp (const NMPlatformLnkSit *a, const NMPlatformLnkSit *b);
|
||||
int nm_platform_lnk_vlan_cmp (const NMPlatformLnkVlan *a, const NMPlatformLnkVlan *b);
|
||||
int nm_platform_lnk_vxlan_cmp (const NMPlatformLnkVxlan *a, const NMPlatformLnkVxlan *b);
|
||||
int nm_platform_ip4_address_cmp (const NMPlatformIP4Address *a, const NMPlatformIP4Address *b);
|
||||
|
|
|
|||
|
|
@ -2054,6 +2054,15 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_macvlan_to_string,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_macvlan_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_SIT - 1] = {
|
||||
.obj_type = NMP_OBJECT_TYPE_LNK_SIT,
|
||||
.sizeof_data = sizeof (NMPObjectLnkSit),
|
||||
.sizeof_public = sizeof (NMPlatformLnkSit),
|
||||
.obj_type_name = "sit",
|
||||
.lnk_link_type = NM_LINK_TYPE_SIT,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_sit_to_string,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_sit_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_VLAN - 1] = {
|
||||
.obj_type = NMP_OBJECT_TYPE_LNK_VLAN,
|
||||
.sizeof_data = sizeof (NMPObjectLnkVlan),
|
||||
|
|
|
|||
|
|
@ -173,6 +173,10 @@ typedef struct {
|
|||
NMPlatformLnkMacvlan _public;
|
||||
} NMPObjectLnkMacvlan;
|
||||
|
||||
typedef struct {
|
||||
NMPlatformLnkSit _public;
|
||||
} NMPObjectLnkSit;
|
||||
|
||||
typedef struct {
|
||||
NMPlatformLnkVlan _public;
|
||||
|
||||
|
|
@ -221,6 +225,9 @@ struct _NMPObject {
|
|||
NMPlatformLnkMacvlan lnk_macvlan;
|
||||
NMPObjectLnkMacvlan _lnk_macvlan;
|
||||
|
||||
NMPlatformLnkSit lnk_sit;
|
||||
NMPObjectLnkSit _lnk_sit;
|
||||
|
||||
NMPlatformLnkVlan lnk_vlan;
|
||||
NMPObjectLnkVlan _lnk_vlan;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue