[libvirt] [PATCHv2 3/6] interface: Refactor interface vlan to helper func
Laine Stump
laine at laine.org
Thu Feb 21 21:03:29 UTC 2013
On 02/20/2013 02:56 PM, Doug Goldstein wrote:
> Mechanical move to break up udevIfaceGetIfaceDef() into different
> helpers for each of the interface types to hopefully make the code
> easier to follow. This moves the vlan code to
> udevIfaceGetIfaceDefVlan().
> ---
> src/interface/interface_backend_udev.c | 73 +++++++++++++++++++++-------------
> 1 file changed, 46 insertions(+), 27 deletions(-)
>
> diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c
> index f5b44ea..e5ab1a7 100644
> --- a/src/interface/interface_backend_udev.c
> +++ b/src/interface/interface_backend_udev.c
> @@ -654,6 +654,51 @@ err:
> return -1;
> }
>
> +static int
> +ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
> +ATTRIBUTE_NONNULL(4) ATTRIBUTE_RETURN_CHECK
> +udevIfaceGetIfaceDefVlan(struct udev *udev ATTRIBUTE_UNUSED,
> + struct udev_device *dev ATTRIBUTE_UNUSED,
> + const char *name,
> + virInterfaceDef *ifacedef)
> +{
> + char *vid;
> + char *vlan_parent_dev = NULL;
> +
> + vlan_parent_dev = strdup(name);
> + if (!vlan_parent_dev) {
> + virReportOOMError();
> + goto cleanup;
> + }
> +
> + /* Find the DEVICE.VID again */
> + vid = strrchr(vlan_parent_dev, '.');
> + if (!vid) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("failed to find the VID for the VLAN device '%s'"),
> + name);
> + goto cleanup;
> + }
> +
> + /* Replace the dot with a NULL so we can have the device and VID */
> + vid[0] = '\0';
> + vid++;
> +
> + /* Set our type to VLAN */
> + ifacedef->type = VIR_INTERFACE_TYPE_VLAN;
> +
> + /* Set the VLAN specifics */
> + ifacedef->data.vlan.tag = vid;
> + ifacedef->data.vlan.devname = vlan_parent_dev;
> +
> + return 0;
> +
> +cleanup:
> + VIR_FREE(vlan_parent_dev);
> +
> + return -1;
> +}
> +
> static virInterfaceDef * ATTRIBUTE_NONNULL(1)
> udevIfaceGetIfaceDef(struct udev *udev, const char *name)
> {
> @@ -712,34 +757,8 @@ udevIfaceGetIfaceDef(struct udev *udev, const char *name)
> * other devices */
> vlan_parent_dev = strrchr(name, '.');
> if (vlan_parent_dev) {
> - /* Found the VLAN dot */
> - char *vid;
> -
> - vlan_parent_dev = strdup(name);
> - if (!vlan_parent_dev) {
> - virReportOOMError();
> + if (udevIfaceGetIfaceDefVlan(udev, dev, name, ifacedef))
> goto cleanup;
> - }
> -
> - /* Find the DEVICE.VID separator again */
> - vid = strrchr(vlan_parent_dev, '.');
> - if (!vid) {
> - virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("failed to find the VID for the VLAN device '%s'"),
> - name);
> - goto cleanup;
> - }
> -
> - /* Replace the dot with a NULL so we can have the device and VID */
> - vid[0] = '\0';
> - vid++;
> -
> - /* Set our type to VLAN */
> - ifacedef->type = VIR_INTERFACE_TYPE_VLAN;
> -
> - /* Set the VLAN specifics */
> - ifacedef->data.vlan.tag = vid;
> - ifacedef->data.vlan.devname = vlan_parent_dev;
> } else if (STREQ_NULLABLE(udev_device_get_devtype(dev), "bridge")) {
> if (udevIfaceGetIfaceDefBridge(udev, dev, name, ifacedef) < 0)
> goto cleanup;
ACK.
More information about the libvir-list
mailing list