[libvirt] [PATCH 2/4] interface: Refactor interface vlan to helper func
Laine Stump
laine at laine.org
Mon Feb 18 20:33:30 UTC 2013
On 02/17/2013 08: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 | 81 ++++++++++++++++++++++------------
> 1 file changed, 54 insertions(+), 27 deletions(-)
>
> diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c
> index abd9895..c144978 100644
> --- a/src/interface/interface_backend_udev.c
> +++ b/src/interface/interface_backend_udev.c
> @@ -627,6 +627,59 @@ cleanup:
> return -1;
> }
>
> +static int
> +udevIfaceGetIfaceDefVlan(struct udev *udev ATTRIBUTE_UNUSED,
> + struct udev_device *dev ATTRIBUTE_UNUSED,
> + const char *name,
> + virInterfaceDef *ifacedef)
> + ATTRIBUTE_NONNULL(1)
> + ATTRIBUTE_NONNULL(2)
> + ATTRIBUTE_NONNULL(3)
> + ATTRIBUTE_NONNULL(4)
> + ATTRIBUTE_RETURN_CHECK;
Same comment applies here as in bridge case, about combining the forward
declaration with the definition, and putting the ATTRIBUTES directly in
the definition.
ACK with that change.
> +static int
> +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)
> {
> @@ -685,34 +738,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();
> - 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);
> + if (udevIfaceGetIfaceDefVlan(udev, dev, name, ifacedef))
> 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))
> goto cleanup;
More information about the libvir-list
mailing list