]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
util: define virNetDevRxFilter and basic utility functions
authorLaine Stump <laine@laine.org>
Sat, 20 Sep 2014 18:39:44 +0000 (14:39 -0400)
committerLaine Stump <laine@laine.org>
Mon, 6 Oct 2014 17:30:53 +0000 (13:30 -0400)
This same structure will be used to retrieve RX filter info for
interfaces on the host via netlink messages, and RX filter info for
interfaces on the guest via the qemu "query-rx-filter" command.

src/libvirt_private.syms
src/util/virnetdev.c
src/util/virnetdev.h

index 8d8342f351b72b0730a30df4775bc92e1edf2bdc..d6265acd66e7329ca94939433bef414bd5b3aa09 100644 (file)
@@ -1615,6 +1615,10 @@ virNetDevReplaceMacAddress;
 virNetDevReplaceNetConfig;
 virNetDevRestoreMacAddress;
 virNetDevRestoreNetConfig;
+virNetDevRxFilterFree;
+virNetDevRxFilterModeTypeFromString;
+virNetDevRxFilterModeTypeToString;
+virNetDevRxFilterNew;
 virNetDevSetIPv4Address;
 virNetDevSetMAC;
 virNetDevSetMTU;
index 8815e1881958cf019f70286ca38c02b46c3a4309..db5623ae77b7f6addc916a5afc364abda1d0e359 100644 (file)
@@ -1932,3 +1932,34 @@ virNetDevGetLinkInfo(const char *ifname,
     return 0;
 }
 #endif /* defined(__linux__) */
+
+
+VIR_ENUM_IMPL(virNetDevRxFilterMode,
+              VIR_NETDEV_RX_FILTER_MODE_LAST,
+              "none",
+              "normal",
+              "all");
+
+
+virNetDevRxFilterPtr
+virNetDevRxFilterNew(void)
+{
+    virNetDevRxFilterPtr filter;
+
+    if (VIR_ALLOC(filter) < 0)
+        return NULL;
+    return filter;
+}
+
+
+void
+virNetDevRxFilterFree(virNetDevRxFilterPtr filter)
+{
+    if (filter) {
+        VIR_FREE(filter->name);
+        VIR_FREE(filter->unicast.table);
+        VIR_FREE(filter->multicast.table);
+        VIR_FREE(filter->vlan.table);
+        VIR_FREE(filter);
+    }
+}
index 69e365e74184baee708dfd995bbccef109ef4646..2a6e67d4b925416c09ddefd2fba1f6b9fe66eec1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Red Hat, Inc.
+ * Copyright (C) 2007-2014 Red Hat, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -37,6 +37,42 @@ typedef struct ifreq virIfreq;
 typedef void virIfreq;
 # endif
 
+typedef enum {
+   VIR_NETDEV_RX_FILTER_MODE_NONE = 0,
+   VIR_NETDEV_RX_FILTER_MODE_NORMAL,
+   VIR_NETDEV_RX_FILTER_MODE_ALL,
+
+   VIR_NETDEV_RX_FILTER_MODE_LAST
+} virNetDevRxFilterMode;
+VIR_ENUM_DECL(virNetDevRxFilterMode)
+
+typedef struct _virNetDevRxFilter virNetDevRxFilter;
+typedef virNetDevRxFilter *virNetDevRxFilterPtr;
+struct _virNetDevRxFilter {
+    char *name; /* the alias used by qemu, *not* name used by guest */
+    virMacAddr mac;
+    bool promiscuous;
+    bool broadcastAllowed;
+
+    struct {
+        int mode; /* enum virNetDevRxFilterMode */
+        bool overflow;
+        virMacAddrPtr table;
+        size_t nTable;
+    } unicast;
+    struct {
+        int mode; /* enum virNetDevRxFilterMode */
+        bool overflow;
+        virMacAddrPtr table;
+        size_t nTable;
+    } multicast;
+    struct {
+        int mode; /* enum virNetDevRxFilterMode */
+        unsigned int *table;
+        size_t nTable;
+    } vlan;
+};
+
 int virNetDevSetupControl(const char *ifname,
                           virIfreq *ifr)
     ATTRIBUTE_RETURN_CHECK;
@@ -150,4 +186,8 @@ int virNetDevGetLinkInfo(const char *ifname,
                          virInterfaceLinkPtr lnk)
     ATTRIBUTE_NONNULL(1);
 
+virNetDevRxFilterPtr virNetDevRxFilterNew(void)
+   ATTRIBUTE_RETURN_CHECK;
+void virNetDevRxFilterFree(virNetDevRxFilterPtr filter);
+
 #endif /* __VIR_NETDEV_H__ */