diff options
author | jeff <jeff> | 2008-09-27 03:01:44 +0000 |
---|---|---|
committer | jeff <jeff> | 2008-09-27 03:01:44 +0000 |
commit | 4b5d4c82766ef1869d03df63fa1e2f0dd050cb6a (patch) | |
tree | c5c814482090bb5e0799db17940250d700857c05 /FS/FS/svc_broadband.pm | |
parent | f411189684b0ca7cc1b4b3e9be1895607245b595 (diff) |
per address block ip auto assignment and auto router selection
Diffstat (limited to 'FS/FS/svc_broadband.pm')
-rwxr-xr-x | FS/FS/svc_broadband.pm | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/FS/FS/svc_broadband.pm b/FS/FS/svc_broadband.pm index fa90437..b808527 100755 --- a/FS/FS/svc_broadband.pm +++ b/FS/FS/svc_broadband.pm @@ -203,7 +203,7 @@ sub check { my $error = $self->ut_numbern('svcnum') - || $self->ut_foreign_key('blocknum', 'addr_block', 'blocknum') + || $self->ut_numbern('blocknum') || $self->ut_textn('description') || $self->ut_number('speed_up') || $self->ut_number('speed_down') @@ -231,7 +231,12 @@ sub check { return "Invalid pkgnum" unless $cust_pkg; } - if ($cust_pkg) { + if ($self->blocknum) { + $error = $self->ut_foreign_key('blocknum', 'addr_block', 'blocknum'); + return $error if $error; + } + + if ($cust_pkg && $self->blocknum) { my $addr_agentnum = $self->addr_block->agentnum; if ($addr_agentnum && $addr_agentnum != $cust_pkg->cust_main->agentnum) { return "Address block does not service this customer"; @@ -239,6 +244,8 @@ sub check { } if (not($self->ip_addr) or $self->ip_addr eq '0.0.0.0') { + return "Must supply either address or block" + unless $self->blocknum; my $next_addr = $self->addr_block->next_free_addr; if ($next_addr) { $self->ip_addr($next_addr->addr); @@ -247,6 +254,19 @@ sub check { } } + if (not($self->blocknum)) { + return "Must supply either address or block" + unless ($self->ip_addr and $self->ip_addr ne '0.0.0.0'); + my @block = grep { $_->NetAddr->contains($self->NetAddr) } + map { $_->addr_block } + $self->allowed_routers; + if (scalar(@block)) { + $self->blocknum($block[0]->blocknum); + }else{ + return "Address not with available block."; + } + } + # This should catch errors in the ip_addr. If it doesn't, # they'll almost certainly not map into the block anyway. my $self_addr = $self->NetAddr; #netmask is /32 |