[libvirt] [PATCH] Add V6LOCAL parameter to nwfilter rules.

Brian Rak brak at gameservers.com
Wed Apr 2 20:18:02 UTC 2014


On 4/2/2014 3:56 PM, Eric Blake wrote:
> On 04/02/2014 01:40 PM, Brian Rak wrote:
>> Currently, adding any sort of IPv6 nwfilter rules is rather difficult.  There are no standard rules,
> Long lines; we tend to keep commit messages wrapped around 72 columns or
> so ('git log' adds indentation, and commits start to look stupid in the
> terminal if they wrap while reading 'git log').
>
>> and you end up doing a lot of things by hand.  This patch makes the $V6LOCAL variable available within
>> rules.  This is the generated from the interface's mac address using the modified EUI-64 format, which
>> matches what the guest should be using.
> An example in the commit message of what the variable expands to would
> be nice.
>
>> This is part of what information is needed to correctly filter guest IPv6 traffic.  Since this changes
>> with the MAC address, it is significantly easier if libvirt populates it (rather then requring the
> s/requring/requiring/
>
>> user to enter it)
>>
>> ---
>>   docs/formatnwfilter.html.in            |    9 ++++++---
>>   src/conf/nwfilter_params.h             |    1 +
>>   src/nwfilter/nwfilter_gentech_driver.c |   23 +++++++++++++++++++++++
>>   3 files changed, 30 insertions(+), 3 deletions(-)
>>   mode change 100644 => 100755 src/nwfilter/nwfilter_gentech_driver.c
>>
>> @@ -251,6 +251,9 @@
>>         parameter similar to the IP parameter above, it is discouraged
>>         since libvirt knows what MAC address an interface will be using.
>>         <br/><br/>
>> +      <code>V6LOCAL</code> is the computed IPv6 link-local address.
>> +      This is based on the MAC variable
> Also worth an example of what this will contain (such as
> fe80::5254:00ff:fe1a:0a6d).  And definitely needs a "Since" tag (in the
> appropriate <div> markup) mentioning this was added in 1.2.4.
>
>
>> +
>> +        virMacAddr parsedMac;
>> +        if (virMacAddrParse(macaddr, &parsedMac) == 0)
>> +        {
> Style - this { belongs on the same line as the if.
Thanks, will make those changes

>> +            parsedMac.addr[0] ^= 2;
>> +
>> +            char euiMacAddr[26];
>> +            snprintf(euiMacAddr, sizeof(euiMacAddr), "fe80::%x%x:%xff:fe%x:%x%x", parsedMac.addr[0], parsedMac.addr[1], parsedMac.addr[2],
>> +                parsedMac.addr[3], parsedMac.addr[4], parsedMac.addr[5]);
> Long line; please wrap to 80 columns.  You MEANT to use %02x; your code
> misbehaves on zero bytes.  Why do you need to open-code the snprintf;
> would it be any cleaner to just use functions from util/virsocketaddr.h
> for formatting an IPv6 value that you construct from the MAC address?
In my opinion, manually formatting the address here is a lot simpler to 
understand then constructing a virSockAddr and using virSocketAddrFormat 
on it.  It's definitely shorter code this way. I'm not sure which way 
makes more sense.




More information about the libvir-list mailing list