<& elements/process.html, 'table' => 'addr_range', 'popup_reload' => 'Address range changed', 'precheck_callback' => sub { my ($cgi) = @_; my $start = NetAddr::IP->new($cgi->param('start'), 0) or return 'Illegal or empty (IP address) start: '.$cgi->param('start'); if ( length($cgi->param('end')) ) { my $end = NetAddr::IP->new($cgi->param('end'), 0) or return 'Illegal or empty (IP address) end: '.$cgi->param('end'); if ( $end < $start ) { ($start, $end) = ($end, $start); $cgi->param('end', $end->addr); $cgi->param('start', $start->addr); } # detect addr ranges that are too big my ($one) = split('\.', $start->addr); if ( $one < 128 and $start + 0x7FFFFFFF <= $end ) { # then this is going to overflow return "Address ranges must be < 2^31 - 1 addresses long."; } # if the first octet is >= 128, then it's in the top half of # address space and it CAN'T be too big $cgi->param('length', $end - $start + 1); } else { $cgi->param('length', 1); } ''; }, &>