aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/ipstack/ipstack.go (renamed from pkg/protocol.go)17
-rw-r--r--pkg/lnxconfig/lnxconfig.go (renamed from pkg/lnxconfig.go)3
-rw-r--r--pkg/routingTable.go71
-rw-r--r--pkg/routingtable/routingtable.go81
4 files changed, 91 insertions, 81 deletions
diff --git a/pkg/protocol.go b/pkg/ipstack/ipstack.go
index 9358099..770fd17 100644
--- a/pkg/protocol.go
+++ b/pkg/ipstack/ipstack.go
@@ -1,16 +1,15 @@
-package protocol
+package ipstack
import (
- "net"
- "net/netip"
"fmt"
- "os"
- "bufio"
- "time"
- "github.com/pkg/errors"
ipv4header "github.com/brown-csci1680/iptcp-headers"
"github.com/google/netstack/tcpip/header"
- "github.com/brown-csci1680/ipstack-utils"
+ "github.com/pkg/errors"
+ "../../pkg/lnxconfig"
+ "log"
+ "net"
+ "net/netip"
+ "os"
)
const (
@@ -23,7 +22,7 @@ type Interface struct {
AssignedPrefix netip.Prefix
UDPAddr netip.AddrPort
- State uint8_t
+ State bool
neighbors map[netip.AddrPort]netip.AddrPort
}
diff --git a/pkg/lnxconfig.go b/pkg/lnxconfig/lnxconfig.go
index 36b1b56..d0699f9 100644
--- a/pkg/lnxconfig.go
+++ b/pkg/lnxconfig/lnxconfig.go
@@ -3,6 +3,7 @@ package lnxconfig
import (
"bufio"
"fmt"
+ "github.com/pkg/errors"
"net/netip"
"os"
"strings"
@@ -362,4 +363,4 @@ func ParseConfig(configFile string) (*IPConfig, error) {
}
return config, nil
-} \ No newline at end of file
+}
diff --git a/pkg/routingTable.go b/pkg/routingTable.go
deleted file mode 100644
index bda4524..0000000
--- a/pkg/routingTable.go
+++ /dev/null
@@ -1,71 +0,0 @@
-package routingTable
-
-import (
- "fmt"
- "net"
- "net/netip"
- "os"
- "bufio"
-)
-
-type Address struct {
- addr netip.Addr;
- prefix netip.Prefix;
-}
-
-type Routing struct {
- dest Address;
- cost uint16_t;
- mask netip.Prefix;
-}
-
-routingTable := make(map[Address]Routing)
-
-func Initialize(config IpConfig) (error) {
- if len(os.Args) != 2 {
- fmt.Printf("Usage: %s <configFile>\n", os.Args[0])
- os.Exit(1)
- }
- fileName := os.Args[1]
-
- lnxConfig, err := lnxconfig.ParseConfig(fileName)
- if err != nil {
- panic(err)
- }
-
- // populate routing table
- for _, iface := range lnxConfig.Interfaces {
- routingTable[Address{iface.AssignedIP, iface.AssignedPrefix}] = Routing{Address{iface.AssignedIP, iface.AssignedPrefix}, 0, iface.AssignedPrefix}
- }
-
-}
-
-func AddRoute(dest Address, cost uint16_t, mask netip.Prefix) (error) {
- if _, ok := routingTable[dest]; ok {
- return newErrString(ln, "Route already exists")
- }
- routingTable[dest] = Routing{dest, cost, mask}
-}
-
-func RemoveRoute(dest Address) (error) {
- if _, ok := routingTable[dest]; !ok {
- return newErrString(ln, "Route does not exist")
- }
- delete(routingTable, dest)
-}
-
-func GetRoute(dest Address) (Routing, error) {
- // get the most specific route
- for key, value := range routingTable {
- if key.prefix.Contains(dest.addr) {
- return value, nil
- }
- }
- return nil, newErrString(ln, "Route does not exist")
-}
-
-func PrintRoutingTable() {
- for key, value := range routingTable {
- fmt.Printf("%s/%d\t%d\n", key.addr, key.prefix.Bits(), value.cost)
- }
-} \ No newline at end of file
diff --git a/pkg/routingtable/routingtable.go b/pkg/routingtable/routingtable.go
new file mode 100644
index 0000000..7f7e2b2
--- /dev/null
+++ b/pkg/routingtable/routingtable.go
@@ -0,0 +1,81 @@
+package routingtable
+
+import (
+ "fmt"
+ "github.com/pkg/errors"
+ "net/netip"
+)
+
+type Address struct {
+ addr netip.Addr
+ prefix netip.Prefix
+}
+
+type Route struct {
+ dest Address
+ cost uint32
+ mask netip.Prefix
+}
+
+var table map[Address]Route
+
+//func Initialize(config lnxconfig.IPConfig) error {
+// if len(os.Args) != 2 {
+// fmt.Printf("Usage: %s <configFile>\n", os.Args[0])
+// os.Exit(1)
+// }
+// fileName := os.Args[1]
+//
+// lnxConfig, err := lnxconfig.ParseConfig(fileName)
+// if err != nil {
+// panic(err)
+// }
+//
+// // make and populate routing table
+// table = make(map[Address]Route)
+// for _, iface := range lnxConfig.Interfaces {
+// var address = Address{iface.AssignedIP, iface.AssignedPrefix}
+// var route = Route{Address{iface.AssignedIP, iface.AssignedPrefix}, 0, iface.AssignedPrefix}
+// table[address] = route
+// }
+//
+//
+//}
+
+func AddRoute(dest Address, cost uint32, mask netip.Prefix) error {
+ if _, ok := table[dest]; ok {
+ return errors.New("Route already exists")
+ }
+
+ table[dest] = Route{dest, cost, mask}
+ return nil
+}
+
+func RemoveRoute(dest Address) error {
+ if _, ok := table[dest]; !ok {
+ return errors.New("Route doesn't exist")
+ }
+
+ delete(table, dest)
+ return nil
+}
+
+// TODO: implement this with most specific prefix matching
+func GetRoute(dest Address) (Route, error) {
+ // get the most specific route
+ for key, value := range table {
+ if key.prefix.Contains(dest.addr) {
+ return value, nil
+ }
+ }
+ return Route{}, errors.New("Route doesn't exist")
+}
+
+func SprintRoutingTable() string {
+ message := ""
+ for address, route := range table {
+ message += fmt.Sprintf("%s/%d\t%d\n", address.addr, address.prefix, route.cost)
+ }
+
+ return message
+}