summaryrefslogtreecommitdiffhomepage
path: root/test/scenario_test/quagga-rsconfig.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/scenario_test/quagga-rsconfig.go')
-rw-r--r--test/scenario_test/quagga-rsconfig.go145
1 files changed, 145 insertions, 0 deletions
diff --git a/test/scenario_test/quagga-rsconfig.go b/test/scenario_test/quagga-rsconfig.go
new file mode 100644
index 00000000..bede8326
--- /dev/null
+++ b/test/scenario_test/quagga-rsconfig.go
@@ -0,0 +1,145 @@
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "github.com/BurntSushi/toml"
+ "github.com/jessevdk/go-flags"
+ "github.com/osrg/gobgp/config"
+ "io/ioutil"
+ "log"
+ "net"
+ "os"
+ "path/filepath"
+)
+
+type QuaggaConfig struct {
+ id int
+ config *config.NeighborType
+ gobgpConfig *config.GlobalType
+ serverIP net.IP
+}
+
+func NewQuaggaConfig(id int, gConfig *config.GlobalType, myConfig *config.NeighborType, server net.IP) *QuaggaConfig {
+ return &QuaggaConfig{
+ id: id,
+ config: myConfig,
+ gobgpConfig: gConfig,
+ serverIP: server,
+ }
+}
+
+func (qt *QuaggaConfig) Config() *bytes.Buffer {
+ buf := bytes.NewBuffer(nil)
+
+ buf.WriteString("hostname bgpd\n")
+ buf.WriteString("password zebra\n")
+ buf.WriteString(fmt.Sprintf("router bgp %d\n", qt.config.PeerAs))
+ buf.WriteString(fmt.Sprintf("bgp router-id 192.168.0.%d\n", qt.id))
+ buf.WriteString(fmt.Sprintf("network 192.168.%d.0/24\n", qt.id))
+ buf.WriteString(fmt.Sprintf("neighbor %s remote-as %d\n", qt.serverIP, qt.gobgpConfig.As))
+ buf.WriteString(fmt.Sprintf("neighbor %s password %s\n", qt.serverIP, qt.config.AuthPassword))
+ buf.WriteString("log file /var/log/quagga/bgpd.log")
+ return buf
+}
+
+func create_config_files(nr int, outputDir string) {
+ quaggaConfigList := make([]*QuaggaConfig, 0)
+
+ gobgpConf := config.BgpType{
+ Global: config.GlobalType{
+ As: 65000,
+ RouterId: net.ParseIP("192.168.255.1"),
+ },
+ }
+
+ for i := 1; i < nr+1; i++ {
+ c := config.NeighborType{
+ PeerAs: 65000 + uint32(i),
+ NeighborAddress: net.ParseIP(fmt.Sprintf("10.0.0.%d", i)),
+ AuthPassword: fmt.Sprintf("hoge%d", i),
+ }
+ gobgpConf.NeighborList = append(gobgpConf.NeighborList, c)
+ q := NewQuaggaConfig(i, &gobgpConf.Global, &c, net.ParseIP("10.0.255.1"))
+ quaggaConfigList = append(quaggaConfigList, q)
+ os.Mkdir(fmt.Sprintf("%s/q%d", outputDir, i), 0755)
+ err := ioutil.WriteFile(fmt.Sprintf("%s/q%d/bgpd.conf", outputDir, i), q.Config().Bytes(), 0644)
+ if err != nil {
+ log.Fatal(err)
+ }
+ }
+
+ var buffer bytes.Buffer
+ encoder := toml.NewEncoder(&buffer)
+ encoder.Encode(gobgpConf)
+
+ err := ioutil.WriteFile(fmt.Sprintf("%s/gobgpd.conf", outputDir), buffer.Bytes(), 0644)
+ if err != nil {
+ log.Fatal(err)
+ }
+}
+
+func append_config_files(ar int, outputDir string) {
+ gobgpConf := config.BgpType{
+ Global: config.GlobalType{
+ As: 65000,
+ RouterId: net.ParseIP("192.168.255.1"),
+ },
+ }
+ c := config.NeighborType{
+ PeerAs: 65000 + uint32(ar),
+
+ NeighborAddress: net.ParseIP(fmt.Sprintf("10.0.0.%d", ar)),
+ AuthPassword: fmt.Sprintf("hoge%d", ar),
+ }
+ q := NewQuaggaConfig(ar, &gobgpConf.Global, &c, net.ParseIP("10.0.255.1"))
+ os.Mkdir(fmt.Sprintf("%s/q%d", outputDir, ar), 0755)
+ err := ioutil.WriteFile(fmt.Sprintf("%s/q%d/bgpd.conf", outputDir, ar), q.Config().Bytes(), 0644)
+ if err != nil {
+ log.Fatal(err)
+ }
+ newConf := config.BgpType{}
+ _, d_err := toml.DecodeFile(fmt.Sprintf("%s/gobgpd.conf", outputDir), &newConf)
+ if d_err != nil {
+ log.Fatal(err)
+ }
+ newConf.NeighborList = append(newConf.NeighborList, c)
+ var buffer bytes.Buffer
+ encoder := toml.NewEncoder(&buffer)
+ encoder.Encode(newConf)
+ e_err := ioutil.WriteFile(fmt.Sprintf("%s/gobgpd.conf", outputDir), buffer.Bytes(), 0644)
+ if e_err != nil {
+ log.Fatal(err)
+ }
+}
+
+func main() {
+ var opts struct {
+ ClientNumber int `short:"n" long:"client-number" description:"specfying the number of clients" default:"8"`
+ OutputDir string `short:"c" long:"output" description:"specifing the output directory"`
+ AppendClient int `short:"a" long:"append" description:"specifing the add client number" default:"0"`
+ }
+ parser := flags.NewParser(&opts, flags.Default)
+
+ _, err := parser.Parse()
+ if err != nil {
+ os.Exit(1)
+ }
+
+ if opts.OutputDir == "" {
+ opts.OutputDir, _ = filepath.Abs(".")
+ } else {
+ if _, err := os.Stat(opts.OutputDir); os.IsNotExist(err) {
+ os.Mkdir(opts.OutputDir, 0755)
+ }
+ }
+
+ if opts.AppendClient == 0 {
+ create_config_files(opts.ClientNumber, opts.OutputDir)
+ } else {
+ if _, err := os.Stat(fmt.Sprintf("%s/gobgpd.conf", opts.OutputDir)); os.IsNotExist(err) {
+ log.Fatal(err)
+ }
+ append_config_files(opts.AppendClient, opts.OutputDir)
+ }
+}