need help understanding class matching

jeffrey j donovan donovan at beth.k12.pa.us
Wed Aug 31 00:36:39 UTC 2011


On Aug 30, 2011, at 12:09 PM, Simon Hobson wrote:

> jeffrey j donovan wrote:
> 
>> > Really ?
>>> The hardware field (for an ethernet network) will contain a 1 (0x01) followed by the 6 bytes of MAC address - it does not contain an ascii representation of those bytes. To fetch the OUI of the MAC address you do need to get bytes 1 to 3 of the hardware and compare with a 3 byte string.
>> 
>> okay not really, the syntax works but the clients are not matching.
> 
> That's what I thought
> 
>> i did see where someone did a conversion prior to the substring line. but I did not understand it;
>> binary-to-ascii (16, 8, "", substring (hardware, 6, 1))),2) );
>> 
>> 
>> im thinking this might work
>> 
>> ahhh,..
>> i found this
>> http://blather.michaelwlucas.com/archives/962
>> 
>> class "sip-phone" {
>> match if (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:3:e3")
>> or (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:3:6b")
>> or (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:7:eb");
>> log (info, (binary-to-ascii (16,8,":",substring(hardware, 0, 4))));
>> }
>> 
>> makes sense when I see it.
> 
> You do **NOT** have to do this. You can if you wish, but it is not necessary.
> 
> binary-to-ascii does what it says, and with the options specified will convert the binary hardware address to a string representation. Then you can match against a string.
> 
> However, you can save some typing, and processing time*, by just specifying the match strings as the binary string you want to match against.
> * When a packet comes in, you have to do the binary to ascii conversion, for each packet and for each time it's used in a class match.
> 
> so you can do :
> binary-to-ascii (16,8,":",substring(hardware, 1, 3)) = "0:11:ba3"
> or you can so :
> substring(hardware, 1, 3) = "\x00\x11\xba"
> 
> and I think (someone correct me if I'm wrong) you can write that latter one as (note the lack of quotes) :
> substring(hardware, 1, 3) = 00:11:ba
> 

Thanks for your clarification , it really helps me understand my options.
This code is working for me.  I was getting confused on delimiters and basic counting. The machines are now matching.
class "machines" {
		match if substring (hardware, 1,3) = 00:11:af
 		 or substring (hardware, 1,3) = 00:25:bc
		 or substring (hardware, 1,3) = 00:26:4a
		 or substring (hardware, 1,3) = 04:0c:ce
		 or substring (hardware, 1,3) = 04:1e:64
		 or substring (hardware, 1,3) = e8:06:88
		 or substring (hardware, 1,3) = f0:b4:79
		 or substring (hardware, 1,3) = f8:1e:df;
}

-j






More information about the dhcp-users mailing list