+# does what it says on the tin..
+sub populate_routing_table
+{
+ my ($self, $node, $user, $ip) = @_;
+
+ my $rn = Route::Node::get($node);
+ unless ($rn) {
+ $rn = Route::Node->new($node);
+ dbg("ROUTE $self->{call}: ADD NEW node: $node") if isdbg('pc11');
+ }
+
+ my $ru;
+ if ($user ne $node) {
+ $ru = Route::User::get($user);
+ unless ($ru) {
+ $rn->add_user($user, 0, undef);
+ dbg("ROUTE $self->{call}: ADD NEW user: $user -> $node") if isdbg('pc11');
+ }
+ $ru = Route::User::get($user);
+ }
+
+ # Add/Change any IP address info
+
+ # as we have a route to a user, if it (or the node) does not exist then create them
+ # link the user to the node if not already done.
+ # then add or alter the IP address
+ if ($ip && is_ipaddr($ip)) {
+ my $new = $ip;
+ if ($ru) {
+ if ($ru->ip ne $new) {
+ if ($ru->ip) {
+ my $old = $ru->ip;
+ $ru->ip($new);
+ dbg("ROUTE $self->{call}: ALTER IP node: $node user: $user old IP: '$old'-> new IP: '$new'") if isdbg('pc11');
+ } else{
+ $ru->ip($new);
+ dbg("ROUTE $self->{call}: NEW IP node: $node user: $user IP: '$new'") if isdbg('pc11');
+ }
+ }
+ } else {
+ dbg("ROUTE $self->{call}: ADD Failed for node $node user $user") if isdbg('pc11');
+ }
+ }
+}
+