mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-16 09:35:16 +00:00
176a95fd50
This is a simple wrapper around virNetDevBandwidthManipulateFilter() that will update the desired filter on an interface (usually a network bridge) with a new MAC address. Although, the MAC address in question usually refers to some other interface - the one that the filter is constructed for. Yeah, hard to parse. Thing is, our NATed network has a bridge where some part of QoS takes place. And vNICs from guests are plugged into the bridge. However, if a guest decides to change the MAC of its vNIC, the corresponding qemu process emits an event which we can use to update the QoS configuration based on the new MAC address.. However, our QoS hierarchy is currently not notified, therefore it falls apart. This function (when called in response to the aforementioned event) will update our QoS hierarchy and duct tape it together again. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
83 lines
3.1 KiB
C
83 lines
3.1 KiB
C
/*
|
|
* Copyright (C) 2009-2015 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
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Authors:
|
|
* Michal Privoznik <mprivozn@redhat.com>
|
|
* Daniel P. Berrange <berrange@redhat.com>
|
|
*/
|
|
|
|
#ifndef __VIR_NETDEV_BANDWIDTH_H__
|
|
# define __VIR_NETDEV_BANDWIDTH_H__
|
|
|
|
# include "internal.h"
|
|
# include "virmacaddr.h"
|
|
|
|
typedef struct _virNetDevBandwidthRate virNetDevBandwidthRate;
|
|
typedef virNetDevBandwidthRate *virNetDevBandwidthRatePtr;
|
|
struct _virNetDevBandwidthRate {
|
|
unsigned long long average; /* kbytes/s */
|
|
unsigned long long peak; /* kbytes/s */
|
|
unsigned long long floor; /* kbytes/s */
|
|
unsigned long long burst; /* kbytes */
|
|
};
|
|
|
|
typedef struct _virNetDevBandwidth virNetDevBandwidth;
|
|
typedef virNetDevBandwidth *virNetDevBandwidthPtr;
|
|
struct _virNetDevBandwidth {
|
|
virNetDevBandwidthRatePtr in, out;
|
|
};
|
|
|
|
void virNetDevBandwidthFree(virNetDevBandwidthPtr def);
|
|
|
|
int virNetDevBandwidthSet(const char *ifname,
|
|
virNetDevBandwidthPtr bandwidth,
|
|
bool hierarchical_class)
|
|
ATTRIBUTE_RETURN_CHECK;
|
|
int virNetDevBandwidthClear(const char *ifname);
|
|
int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest,
|
|
const virNetDevBandwidth *src)
|
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
|
|
|
|
bool virNetDevBandwidthEqual(virNetDevBandwidthPtr a, virNetDevBandwidthPtr b);
|
|
|
|
int virNetDevBandwidthPlug(const char *brname,
|
|
virNetDevBandwidthPtr net_bandwidth,
|
|
const virMacAddr *ifmac_ptr,
|
|
virNetDevBandwidthPtr bandwidth,
|
|
unsigned int id)
|
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
|
|
ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
|
|
ATTRIBUTE_RETURN_CHECK;
|
|
|
|
int virNetDevBandwidthUnplug(const char *brname,
|
|
unsigned int id)
|
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
|
|
|
|
int virNetDevBandwidthUpdateRate(const char *ifname,
|
|
const char *class_id,
|
|
virNetDevBandwidthPtr bandwidth,
|
|
unsigned long long new_rate)
|
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
|
|
ATTRIBUTE_RETURN_CHECK;
|
|
|
|
int virNetDevBandwidthUpdateFilter(const char *ifname,
|
|
const virMacAddr *ifmac_ptr,
|
|
unsigned int id)
|
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
|
|
ATTRIBUTE_RETURN_CHECK;
|
|
#endif /* __VIR_NETDEV_BANDWIDTH_H__ */
|