public function NetworkShift($netid, $network = '0.0.0.0', $mask = '0.0.0.0', $shift = 0) { global $SYSLOG_RESOURCE_KEYS; if ($this->syslog) { $nodes = array_merge((array) $this->db->GetAll('SELECT id, ownerid, ipaddr FROM vnodes WHERE netid = ? AND ipaddr >= inet_aton(?) AND ipaddr <= inet_aton(?)', array($netid, $network, getbraddr($network, $mask))), (array) $this->db->GetAll('SELECT id, ownerid, ipaddr_pub FROM vnodes WHERE netid = ? AND ipaddr_pub >= inet_aton(?) AND ipaddr_pub <= inet_aton(?)', array($netid, $network, getbraddr($network, $mask)))); if (!empty($nodes)) { foreach ($nodes as $node) { $args = array($SYSLOG_RESOURCE_KEYS[SYSLOG_RES_NODE] => $node['id'], $SYSLOG_RESOURCE_KEYS[SYSLOG_RES_CUST] => $node['ownerid'], $SYSLOG_RESOURCE_KEYS[SYSLOG_RES_NETWORK] => $netid); unset($node['id']); unset($node['ownerid']); foreach ($node as $key => $value) { $args[$key] = $value + $shift; } $this->syslog->AddMessage(SYSLOG_RES_NODE, SYSLOG_OPER_UPDATE, $args, array($SYSLOG_RESOURCE_KEYS[SYSLOG_RES_NODE], $SYSLOG_RESOURCE_KEYS[SYSLOG_RES_NETWORK], $SYSLOG_RESOURCE_KEYS[SYSLOG_RES_CUST])); } } } return $this->db->Execute('UPDATE nodes SET ipaddr = ipaddr + ? WHERE ipaddr >= inet_aton(?) AND ipaddr <= inet_aton(?)', array($shift, $network, getbraddr($network, $mask))) + $this->db->Execute('UPDATE nodes SET ipaddr_pub = ipaddr_pub + ? WHERE ipaddr_pub >= inet_aton(?) AND ipaddr_pub <= inet_aton(?)', array($shift, $network, getbraddr($network, $mask))); }
function isipinstrict($ip, $net, $mask) { if (ip_long($ip) >= ip_long(getnetaddr($net, $mask)) && ip_long($ip) <= ip_long(getbraddr($net, $mask))) { return true; } else { return false; } }
function NetworkShift($network = '0.0.0.0', $mask = '0.0.0.0', $shift = 0, $netid = NULL) { if ($netid) { $result = $this->DB->Execute('UPDATE nodes SET ipaddr = ipaddr + ? WHERE ipaddr >= inet_aton(?) AND ipaddr <= inet_aton(?) AND netid=?', array($shift, $network, getbraddr($network, $mask), $netid)); } else { $result = $this->DB->Execute('UPDATE nodes SET ipaddr = ipaddr + ? WHERE ipaddr >= inet_aton(?) AND ipaddr <= inet_aton(?)', array($shift, $network, getbraddr($network, $mask))); } return $result + $this->DB->Execute('UPDATE nodes SET ipaddr_pub = ipaddr_pub + ? WHERE ipaddr_pub >= inet_aton(?) AND ipaddr_pub <= inet_aton(?)', array($shift, $network, getbraddr($network, $mask))); }
$node_pub = $DB->GetRow('SELECT MAX(ipaddr_pub) AS last, MIN(ipaddr_pub) AS first FROM nodes WHERE (ipaddr_pub>? AND ipaddr_pub<?)', array($network['addresslong'],ip_long($network['broadcast']))); if($node_pub['first']) $node['first'] = min($node['first'], $node_pub['first']); if($node_pub['last']) $node['last'] = min($node['last'], $node_pub['last']); if(($node['first'] && $node['first'] < $networkdata['addresslong']) || ($node['last'] && $node['last'] >= ip_long(getbraddr($networkdata['address'],prefix2mask($networkdata['prefix'])))) ) { $shift = $networkdata['addresslong'] - $network['addresslong']; if($node['first'] + $shift < $networkdata['addresslong'] || $node['last'] + $shift >= ip_long(getbraddr($networkdata['address'],prefix2mask($networkdata['prefix']))) ) $error['address'] = trans('New network is too small. Put in order IP addresses first!'); else $networkdata['needshft'] = TRUE; } } } } } if($networkdata['interface'] != '' && !preg_match('/^[a-z0-9:.]+$/', $networkdata['interface'])) $error['interface'] = trans('Incorrect interface name!'); if($networkdata['name']=='') $error['name'] = trans('Network name is required!');
function NetworkShift($network = '0.0.0.0', $mask = '0.0.0.0', $shift = 0) { return $this->DB->Execute('UPDATE nodes SET ipaddr = ipaddr + ? WHERE ipaddr >= inet_aton(?) AND ipaddr <= inet_aton(?)', array($shift, $network, getbraddr($network, $mask))) + $this->DB->Execute('UPDATE nodes SET ipaddr_pub = ipaddr_pub + ? WHERE ipaddr_pub >= inet_aton(?) AND ipaddr_pub <= inet_aton(?)', array($shift, $network, getbraddr($network, $mask))); }