[Kea-users] Hook subnet4_select callout modifying subnet ID

Thomas Markwalder tmark at isc.org
Thu May 12 17:57:02 UTC 2016


On 5/12/16 1:13 PM, Bryan Perry wrote:
> Hi All,
>
> I am needing to modify the subnet ID for certain clients. It looks
> like the best way to do this is in the subnet4_select hook callout,
> but I'm not the most skilled C++ coder. Can anyone provide me with a
> quick example of modifying the subnet ID? Even pseudo-code would be
> somewhat helpful.
>
> I do have a library compiled and loaded, and I can read the value of
> the subnet ID this way:
>
> Subnet4Ptr subnet4_ptr;
> handle.getArgument("subnet4", subnet4_ptr);
> SubnetID subnetId = subnet4_ptr->getID();
>
> What I don't know is how to correctly set it to a different value.
>
> Thanks in advance for any help,
> Bryan
> _______________________________________________
> Kea-users mailing list
> Kea-users at lists.isc.org
> https://lists.isc.org/mailman/listinfo/kea-users

Hi Bryan:

If you're trying to change the subnet that's been selected, altering the
subnet ID as you suggest will not work.  You need to update the
"subnet4" argument with the desired subnet as illustrated in the snippet
below:

   :

   // Get the collection of subnets from the callout argument set
   const isc::dhcp::Subnet4Collection* subnets;
   handle.getArgument("subnet4collection", subnets);

   // Am assuming you somehow know the ID of the subnet you want
   int the_id_you_want = 2;

    // Next, we iterate over the collection of subnets, looking for the
    // ID we want
    for (int i = 0; i < subnets->size();  ++i) {
        Subnet4Ptr new_subnet = (*subnets)[i];
        if (new_subnet->getID() == the_id_you_want) {
            // id matched so replace the selected subnet by           
            // setting the "subnet4" callout argument with
            // the new subnet
            handle.setArgument("subnet4", new_subnet);
            break;
        }
    }

    :


The snippet above is written for clarity, I'm sure there are slicker
ways to do it.  It assumes that you somehow know the ID of the subnet
you want and if there's no match it leaves the selected subnet as is. 
Really it is just intended to show you how one might alter the selected
subnet.  Hope this helps.


Thomas Markwalder,

ISC Software Engineering













More information about the Kea-users mailing list