[OpenSIPS-Devel] 2.4 new IP and Subnet comparison.

Adam Overbeeke Adam.Overbeeke at genesys.com
Wed Aug 8 14:22:26 EDT 2018


Hi Bogdan, 

I am providing a piece of my script file (below) and the corresponding output. The route `ip_in_cidr` is called directly from the startup route, for testing purposes.

I can't seem to get the right syntax for my script. Basically I would like to determine if an IP address is in a given subnet. As you can see I am trying to use 2.4 style comparisons for the last 3 IF statements. The first statement passes, for the wrong reasons... Seems that pton is have an issue transforming the IP address. 

Thanks, 

Adam




------- OUTPUT -------

Aug  8 18:03:38 [336] { "t": "2018-08-08T18:03:38.509832Z", "logger_name": "test", "thread_name": 336, "level": "INFO", "route": "startup" }
Aug  8 18:03:38 [336] { "t": "2018-08-08T18:03:38.509913Z", "logger_name": " test ", "thread_name": 336, "level": "INFO", "route": "ip_in_cidr" }
Aug  8 18:03:38 [336] { "t": "2018-08-08T18:03:38.510018Z", "logger_name": " test ", "thread_name": 336, "level": "INFO", "route": "ip_in_cidr", "message": { "mask": -256, "mask_str": "255.255.255.0" } }
Aug  8 18:03:38 [336] ERROR:core:tr_eval_ip: pton transformation applied to invalid IP
Aug  8 18:03:38 [336] ERROR:core:eval_elem: Invalid operator : 10
Aug  8 18:03:38 [336] WARNING:core:do_assign: no value in right expression at /opensips/control.cfg:1613
Aug  8 18:03:38 [336] ERROR:core:tr_eval_ip: pton transformation applied to invalid IP
Aug  8 18:03:38 [336] ERROR:core:eval_elem: Invalid operator : 10
Aug  8 18:03:38 [336] WARNING:core:do_assign: no value in right expression at /opensips/control.cfg:1614
Aug  8 18:03:38 [336] { "t": "2018-08-08T18:03:38.510179Z", "logger_name": " test ", "thread_name": 336, "level": "INFO", "route": "10.10.10.0\/24" }

--- SNIPPET FROM SCRIPT --- 

route[ip_in_cidr]
{
  route(rlog, LV_INFO, "ip_in_cidr");

  $var(input_mask) = route(cidr_to_mask, 24); # Confirmed returns "255.255.255.0"
  $var(input_subnet) = "10.10.10.0";
  $var(input_ip) = "10.10.10.10";

  $var(my_real_subnet) = ( $(var(input_subnet){ip.pton}) & $(var(input_mask){ip.pton}) );
  $var(my_src_net) = ( $(var(input_ip){ip.pton}) & $(var(input_mask){ip.pton}) );

  if ( $var(my_src_net) == $var(my_real_subnet) ) # This passes however... look at the errors from the output above. 
    route(rlog, LV_INFO, "10.10.10.0/24"); 

  $var(input_ip) = "10.10.10.10";
  if ($var(input_ip) == "10.10.10.0/24")
    route(rlog, LV_INFO, "Test1"); 

  $var(input_ip) = "10.10.10.10";
  if ($var(input_ip) == '10.10.10.0/24')
    route(rlog, LV_INFO, "Test2"); 

  $var(input_ip) = "10.10.10.10";
  if ($var(input_ip) == 10.10.10.0/24) # Fails to compile here
    route(rlog, LV_INFO, "Test3"); 
}

route[cidr_to_mask]
{
  $var(cidr_to_mask_iter) = 0;
  $var(mask_str) = "";
  $var(num_ff_octets) = $param(1) / 8;
  $var(partial_octet) = $param(1) % 8;
  
  while ($var(cidr_to_mask_iter) < 4) 
  {
    if ($var(cidr_to_mask_iter) != 0) {
      $var(mask_str) = $var(mask_str) + ".";
    }

    if ($var(cidr_to_mask_iter) < $var(num_ff_octets)) {
      $var(mask_str) = $var(mask_str) + "255";
    } else {
      $var(last_octet) = ((255 << (8 - $var(partial_octet))) & 255);
      $var(mask_str) = $var(mask_str) + $var(last_octet);
    }

    $var(cidr_to_mask_iter) = $var(cidr_to_mask_iter) + 1;
  }

  return($var(mask_str));
} 



More information about the Devel mailing list