map string key

This commit is contained in:
jimZAH 2024-04-10 20:42:12 +01:00
parent 83bbd52cee
commit 47006bd973
2 changed files with 19 additions and 4 deletions

View File

@ -39,6 +39,9 @@ func main() {
log.Fatalln(err)
}
routes.ParseRoutes(*UDPAddr, &rip.RIP)
fmt.Println(routes)
for _, v := range routes {
fmt.Printf("Route:%s\tSubnet:%s\tNexthop:%s\tMetric:%d\tTime: %v\n", v.Addr.String(), v.Subnet.String(), v.Nexthop.String(), v.Metric, v.TTL.Unix())
}
fmt.Println("")
}
}

View File

@ -1,13 +1,15 @@
package routes
import (
"crypto/sha256"
"fmt"
"net"
"time"
"github.com/crip/ripv2"
)
type Routes []Route
type Routes map[string]Route
type Route struct {
Addr net.IP
@ -18,12 +20,22 @@ type Route struct {
}
func New() Routes {
var routes Routes
routes := make(map[string]Route, 25)
return routes
}
func (r *Routes) append(route Route) {
*r = append(*r, route)
key := route.Addr.String() + route.Subnet.String() + route.Nexthop.String() + fmt.Sprintf("%d", route.Metric)
h := sha256.New()
h.Write([]byte(key))
bs := h.Sum(nil)
k, ok := (*r)[string(bs)]
if !ok {
(*r)[string(bs)] = route
return
}
k.TTL = time.Now()
(*r)[string(bs)] = k
}
func (r *Routes) ParseRoutes(addr net.UDPAddr, rip *[25]ripv2.RIP) {