[libvirt] [PATCHv5 1/4] net-dhcp-leases: Implement the public APIs

Daniel P. Berrange berrange at redhat.com
Thu Dec 12 12:46:57 UTC 2013


On Thu, Dec 12, 2013 at 06:00:17PM +0530, Nehal J Wani wrote:
> On Thu, Dec 12, 2013 at 5:14 PM, Daniel P. Berrange <berrange at redhat.com> wrote:
> > On Tue, Nov 26, 2013 at 02:35:58AM +0530, Nehal J Wani wrote:
> >> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> >> index 5aad75c..20ea40a 100644
> >> --- a/include/libvirt/libvirt.h.in
> >> +++ b/include/libvirt/libvirt.h.in
> >> +
> >> +typedef struct _virNetworkDHCPLeases virNetworkDHCPLeases;
> >> +typedef virNetworkDHCPLeases *virNetworkDHCPLeasesPtr;
> >> +struct _virNetworkDHCPLeases {
> >
> > s/Leases/Lease/ -  each struct only stores a single lease
> >
> >> +    char *interface;            /* Network interface name */
> >> +    long long expirytime;       /* Seconds since epoch */
> >> +    int type;                   /* virIPAddrType */
> >> +    char *mac;                  /* MAC address */
> >> +    char *iaid;                 /* IAID */
> >> +    char *ipaddr;               /* IP address */
> >> +    unsigned int prefix;        /* IP address prefix */
> >> +    char *hostname;             /* Hostname */
> >> +    char *clientid;             /* Client ID or DUID */
> >> +};
> >
> >> @@ -2019,6 +2022,7 @@ libvirt_setuid_rpc_client_la_SOURCES =          \
> >>               util/virtypedparam.c            \
> >>               util/viruri.c                   \
> >>               util/virutil.c                  \
> >> +             util/virmacaddr.c               \
> >>               util/viruuid.c                  \
> >>               conf/domain_event.c             \
> >>               rpc/virnetsocket.c              \
> >
> > Don't add this here.
> 
> The code didn't compile without making the above addition. It kept
> throwing the error:
> 
> ../src/.libs/libvirt-setuid-rpc-client.a(libvirt_setuid_rpc_client_la-libvirt.o):
> In function `virNetworkGetDHCPLeasesForMAC':
> /home/Wani/Hobby/libvirt/src/libvirt.c:22187: undefined reference to
> `virMacAddrParse'

That'd go away if you remove that check from the public API
and put it in the driver code instead.

> >> diff --git a/src/libvirt.c b/src/libvirt.c
> >> index eff44eb..9a0b872 100644
> >> --- a/src/libvirt.c
> >> +++ b/src/libvirt.c
> >> @@ -68,6 +68,7 @@
> >>  #include "virstring.h"
> >>  #include "virutil.h"
> >>  #include "virtypedparam.h"
> >> +#include "virmacaddr.h"
> >>
> >>  #ifdef WITH_TEST
> >>  # include "test/test_driver.h"
> >
> >> +int
> >> +virNetworkGetDHCPLeasesForMAC(virNetworkPtr network,
> >> +                              const char *mac,
> >> +                              virNetworkDHCPLeasesPtr **leases,
> >> +                              unsigned int flags)
> >> +{
> >> +    virConnectPtr conn;
> >> +    virMacAddr addr;
> >> +
> >> +    VIR_DEBUG("network=%p, mac=%s, leases=%p, flags=%x",
> >> +               network, mac, leases, flags);
> >> +
> >> +    virResetLastError();
> >> +
> >> +    if (leases)
> >> +        *leases = NULL;
> >> +
> >> +    virCheckNonNullArgGoto(mac, error);
> >> +
> >> +    if (!VIR_IS_CONNECTED_NETWORK(network)) {
> >> +        virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
> >> +        virDispatchError(NULL);
> >> +        return -1;
> >> +    }
> >> +
> >> +    /* Validate the MAC address */
> >> +    if (virMacAddrParse(mac, &addr) < 0) {
> >> +        virReportInvalidArg(mac, "%s",
> >> +                            _("Given MAC Address doesn't comply "
> >> +                              "with the standard (IEEE 802) format"));
> >> +        goto error;
> >> +    }
> >
> > Don't do this here - it is the job of driver APIs todo semantic
> > validation of parameters.
> 
> Do you mean, I need to put this check inside
> networkGetDHCPLeasesForMAC in src/network/bridge_driver.c ?

If you need to parse it, then yes, but if you don't need to parse
it then don't.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list