diff options
Diffstat (limited to 'packages/openbgpd/openbgpd.inc')
-rw-r--r-- | packages/openbgpd/openbgpd.inc | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/packages/openbgpd/openbgpd.inc b/packages/openbgpd/openbgpd.inc new file mode 100644 index 00000000..39dcc66d --- /dev/null +++ b/packages/openbgpd/openbgpd.inc @@ -0,0 +1,122 @@ +<?php + +/* $Id$ */ +/* + openbgpd.inc + Copyright (C) 2007 Scott Ullrich (sullrich@gmail.com) + part of pfSense + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +function openbgpd_install_conf() { + global $config, $g; + + conf_mount_rw(); + + $openbgpd_conf = &$config['installedpackages']['openbgpd']['config'][0]; + $openbgpd_rows = &$config['installedpackages']['openbgpd']['config'][0]['row']; + $openbgpd_groups = &$config['installedpackages']['openbgpdgroups']['config']; + $openbgpd_neighbors = &$config['installedpackages']['openbgpdneighbors']['config']; + + $fd = fopen("/usr/local/etc/bgpd.conf", "w"); + + $conffile = ""; + + // Setup AS # + if($openbgpd_conf['asnum']) + $conffile .= "AS {$openbgpd_conf['asnum']}\n"; + + // Setup holdtime if defined. Default is 90. + if($openbgpd_conf['holdtime']) + $conffile .= "holdtime {$openbgpd_conf['holdtime']}\n"; + + // Specify listen ip + if($openbgpd_conf['listenip']) + $conffile .= "listen on {$openbgpd_conf['listenip']}\n"; + + // Specify router id + if($openbgpd_conf['routerid']) + $conffile .= "router-id {$openbgpd_conf['routerid']}\n"; + + // Handle advertised networks + if($config['installedpackages']['openbgpd']['config'][0]['row']) + if(is_array($openbgpd_rows)) + foreach($openbgpd_rows as $row) + $conffile .= "network {$row['networks']}\n"; + + // Attach neighbors to their respective group owner + if(is_array($openbgpd_groups)) { + foreach($openbgpd_groups as $group) { + $conffile .= "group \"{$group['name']}\" {\n"; + $conffile .= " remote-as {$group['remoteas']}\n"; + foreach($openbgpd_neighbors as $neighbor) { + if($neighbor['groupname'] == $group['name']) { + $conffile .= " neighbor {$neighbor['neighbor']} {\n"; + $conffile .= " descr \"{$neighbor['descr']}\"\n"; + foreach($neighbor['row'] as $row) { + $conffile .= " {$row['paramaters']} {$row['parmvalue']} \n"; + } + $conffile .= " }\n"; + } + } + $conffile .= "}\n"; + } + } + + // Write out the configuration file + fwrite($fd, $conffile); + + // Close file handle + fclose($fd); + + // Create rc.d file + $fd = fopen("/usr/local/etc/rc.d/bgpd.sh","w"); + fwrite($fd, "#!/bin/sh\n"); + fwrite($fd, "bgpd\n"); + fclose($fd); + exec("chmod a+rx /usr/local/etc/rc.d/bgpd.sh"); + + // bgpd process running? if so reload, elsewise start. + if(is_openbgpd_running() == true) { + exec("bgpctl reload"); + } else { + exec("bgpd"); + } + + conf_mount_ro(); +} + +function deinstall_openbgpd() { + exec("rm /usr/local/etc/rc.d/bgpd.sh"); +} + +function is_openbgpd_running() { + $status = `ps awux | grep bgpd | grep "parent" | wc -l | awk '{ print \$1 }'`; + if(intval($status) > 0) + return true; + else + return false; +} + +?>
\ No newline at end of file |