Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lemming no longer runs cleanly #540

Open
cconstab opened this issue Feb 4, 2025 · 2 comments
Open

Lemming no longer runs cleanly #540

cconstab opened this issue Feb 4, 2025 · 2 comments

Comments

@cconstab
Copy link

cconstab commented Feb 4, 2025

Folowing the instructions from repo results in an error message....

╭─cconstab@cally in ~/lemming on main ✔ (origin/main)
╰$ go run ./cmd/lemming --zapi_addr unix:/tmp/zserv.api --alsologtostderr
go: downloading github.com/golang/glog v1.2.4
go: downloading github.com/spf13/pflag v1.0.5
go: downloading github.com/spf13/viper v1.19.0
go: downloading google.golang.org/grpc v1.68.1
go: downloading github.com/openconfig/gribigo v0.0.0-20250129051118-4cc32a19859b
go: downloading k8s.io/klog/v2 v2.120.1
go: downloading k8s.io/klog v1.0.0
go: downloading github.com/fsnotify/fsnotify v1.7.0
go: downloading github.com/mitchellh/mapstructure v1.5.0
go: downloading github.com/sagikazarmark/slog-shim v0.1.0
go: downloading github.com/spf13/afero v1.11.0
go: downloading github.com/spf13/cast v1.6.0
go: downloading google.golang.org/protobuf v1.35.2
go: downloading github.com/openconfig/ygnmi v0.11.1
go: downloading github.com/openconfig/ygot v0.29.20
go: downloading github.com/osrg/gobgp/v3 v3.27.1-0.20240614010451-0148e2d22dcf
go: downloading github.com/openconfig/gnmi v0.11.0
go: downloading gopkg.in/yaml.v3 v3.0.1
go: downloading github.com/openconfig/goyang v1.4.5
go: downloading github.com/openconfig/gnoi v0.4.1
go: downloading github.com/openconfig/gnsi v1.6.0
go: downloading github.com/openconfig/gribi v1.8.1
go: downloading github.com/p4lang/p4runtime v1.4.0-rc.5.0.20220728214547-13f0d02a521e
go: downloading github.com/google/go-cmp v0.6.0
go: downloading github.com/kentik/patricia v1.2.1
go: downloading github.com/sirupsen/logrus v1.9.3
go: downloading golang.org/x/net v0.34.0
go: downloading github.com/go-logr/logr v1.4.2
go: downloading github.com/google/uuid v1.6.0
go: downloading lukechampine.com/uint128 v1.3.0
go: downloading golang.org/x/sys v0.29.0
go: downloading golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8
go: downloading github.com/subosito/gotenv v1.6.0
go: downloading github.com/hashicorp/hcl v1.0.0
go: downloading gopkg.in/ini.v1 v1.67.0
go: downloading github.com/magiconair/properties v1.8.7
go: downloading github.com/pelletier/go-toml/v2 v2.2.2
go: downloading golang.org/x/text v0.21.0
go: downloading github.com/openconfig/gocloser v0.0.0-20220310182203-c6c950ed3b0b
go: downloading github.com/vishvananda/netlink v1.2.1-beta.2
go: downloading github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13
go: downloading github.com/eapache/channels v1.1.0
go: downloading github.com/kylelemons/godebug v1.1.0
go: downloading github.com/google/gopacket v1.1.19
go: downloading google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576
go: downloading go.opentelemetry.io/otel v1.31.0
go: downloading google.golang.org/genproto v0.0.0-20240708141625-4ad9e859172b
go: downloading go.opentelemetry.io/otel/trace v1.31.0
go: downloading bitbucket.org/creachadair/stringset v0.0.14
go: downloading github.com/spf13/cobra v1.8.0
go: downloading github.com/k-sone/critbitgo v1.4.0
go: downloading github.com/pkg/errors v0.9.1
go: downloading github.com/vishvananda/netns v0.0.4
go: downloading github.com/eapache/queue v1.1.0
go: downloading go.opentelemetry.io/otel/metric v1.31.0
go: downloading github.com/go-logr/stdr v1.2.2
../go/pkg/mod/go.opentelemetry.io/[email protected]/attribute/set.go:7:2: package cmp is not in GOROOT (/usr/lib/go-1.18/src/cmp)
dataplane/saiserver/attrmgr/attrmgr.go:23:2: package log/slog is not in GOROOT (/usr/lib/go-1.18/src/log/slog)
../go/pkg/mod/google.golang.org/[email protected]/experimental/stats/metricregistry.go:22:2: package maps is not in GOROOT (/usr/lib/go-1.18/src/maps)
../go/pkg/mod/google.golang.org/[email protected]/clientconn.go:27:2: package slices is not in GOROOT (/usr/lib/go-1.18/src/slices)
╭─cconstab@cally in ~/lemming on main ✔ (origin/main)
╰$ 
@cconstab
Copy link
Author

cconstab commented Feb 4, 2025

So this for others is a go lang version issue...

To solve upgrade to latest version of go and make sure to install the pcap libs

https://go.dev/doc/install

 sudo apt install -y libpcap-dev

But even then still not working.....


╰$ go run ./cmd/lemming --zapi_addr unix:/tmp/zserv.api --alsologtostderr
github.com/openconfig/lemming/gnmi/oc/netinstisis: /usr/local/go/pkg/tool/linux_amd64/compile: signal: killed
github.com/openconfig/lemming/gnmi/oc/netinstbgp: /usr/local/go/pkg/tool/linux_amd64/compile: signal: killed

╭─cconstab@cally in ~/lemming on main ✘ (origin/main)
╰$

This is likely memory.... Upgradining that now :-) Will report back

With 4G

╰$ go run ./cmd/lemming --zapi_addr unix:/tmp/zserv.api --alsologtostderr
github.com/openconfig/lemming/gnmi/oc/networkinstance: /usr/local/go/pkg/tool/linux_amd64/compile: signal: killed
╭─cconstab@cally in ~/lemming on main ✔ (origin/main)
╰$ 

And with 8G we are up...


╭─cconstab@cally in ~/lemming on main ✔ (origin/main)
╰$ go run ./cmd/lemming --zapi_addr unix:/tmp/zserv.api --alsologtostderr
I0204 16:42:31.442667    1530 lemming.go:211] starting gNMI
I0204 16:42:31.442893    1530 lemming.go:240] starting gNSI
I0204 16:42:32.489422    1530 lemming.go:250] starting sysrib
I0204 16:42:32.489587    1530 connected.go:46] starting connected route watcher
I0204 16:42:32.489959    1530 subscribe.go:283] peer: <nil> target: "fakedut" subscription: subscribe:{prefix:{target:"fakedut"} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"state"} elem:{name:"enabled"}}} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"state"} elem:{name:"ifindex"}}} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"subinterfaces"} elem:{name:"subinterface" key:{key:"index" value:"0"}} elem:{name:"ipv4"} elem:{name:"addresses"} elem:{name:"address" key:{key:"ip" value:"*"}} elem:{name:"state"} elem:{name:"ip"}}} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"subinterfaces"} elem:{name:"subinterface" key:{key:"index" value:"0"}} elem:{name:"ipv4"} elem:{name:"addresses"} elem:{name:"address" key:{key:"ip" value:"*"}} elem:{name:"state"} elem:{name:"prefix-length"}}} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"subinterfaces"} elem:{name:"subinterface" key:{key:"index" value:"0"}} elem:{name:"ipv6"} elem:{name:"addresses"} elem:{name:"address" key:{key:"ip" value:"*"}} elem:{name:"state"} elem:{name:"ip"}}} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"subinterfaces"} elem:{name:"subinterface" key:{key:"index" value:"0"}} elem:{name:"ipv6"} elem:{name:"addresses"} elem:{name:"address" key:{key:"ip" value:"*"}} elem:{name:"state"} elem:{name:"prefix-length"}}} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"subinterfaces"} elem:{name:"subinterface" key:{key:"index" value:"0"}} elem:{name:"state"} elem:{name:"ifindex"}}} subscription:{path:{origin:"openconfig" elem:{name:"interfaces"} elem:{name:"interface" key:{key:"name" value:"*"}} elem:{name:"subinterfaces"} elem:{name:"subinterface" key:{key:"index" value:"0"}} elem:{name:"state"} elem:{name:"enabled"}}} encoding:PROTO}
I0204 16:42:32.490478    1530 subscribe.go:283] peer: <nil> target: "fakedut" subscription: subscribe:{prefix:{target:"fakedut"} subscription:{path:{origin:"openconfig" elem:{name:"bgp-gue-ipv4-policies"} elem:{name:"bgp-gue-ipv4-global-policy" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"prefix"}}} subscription:{path:{origin:"openconfig" elem:{name:"bgp-gue-ipv4-policies"} elem:{name:"bgp-gue-ipv4-global-policy" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"dst-port-ipv4"}}} subscription:{path:{origin:"openconfig" elem:{name:"bgp-gue-ipv4-policies"} elem:{name:"bgp-gue-ipv4-global-policy" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"dst-port-ipv6"}}} subscription:{path:{origin:"openconfig" elem:{name:"bgp-gue-ipv4-policies"} elem:{name:"bgp-gue-ipv4-global-policy" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"src-ip"}}} subscription:{path:{origin:"openconfig" elem:{name:"bgp-gue-ipv6-policies"} elem:{name:"bgp-gue-ipv6-global-policy" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"prefix"}}} subscription:{path:{origin:"openconfig" elem:{name:"bgp-gue-ipv6-policies"} elem:{name:"bgp-gue-ipv6-global-policy" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"dst-port-ipv6"}}} subscription:{path:{origin:"openconfig" elem:{name:"bgp-gue-ipv6-policies"} elem:{name:"bgp-gue-ipv6-global-policy" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"src-ip"}}} encoding:PROTO}
I0204 16:42:32.490956    1530 subscribe.go:283] peer: <nil> target: "fakedut" subscription: subscribe:{prefix:{target:"fakedut"} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"STATIC"} key:{key:"name" value:"DEFAULT"}} elem:{name:"static-routes"} elem:{name:"static" key:{key:"prefix" value:"*"}} elem:{name:"next-hops"} elem:{name:"next-hop" key:{key:"index" value:"*"}} elem:{name:"config"} elem:{name:"next-hop"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"STATIC"} key:{key:"name" value:"DEFAULT"}} elem:{name:"static-routes"} elem:{name:"static" key:{key:"prefix" value:"*"}} elem:{name:"next-hops"} elem:{name:"next-hop" key:{key:"index" value:"*"}} elem:{name:"config"} elem:{name:"recurse"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"STATIC"} key:{key:"name" value:"DEFAULT"}} elem:{name:"static-routes"} elem:{name:"static" key:{key:"prefix" value:"*"}} elem:{name:"config"} elem:{name:"prefix"}}} encoding:PROTO}
I0204 16:42:32.494305    1530 lemming.go:259] starting gRIBI
I0204 16:42:32.510595    1530 zapi.go:119] ZAPI Server started at /tmp/zserv.api
I0204 16:42:32.511000    1530 lemming.go:267] starting P4RT (there is nothing here yet)
I0204 16:42:32.511136    1530 lemming.go:270] Create listeners
I0204 16:42:32.511473    1530 subscribe.go:283] peer: <nil> target: "fakedut" subscription: subscribe:{prefix:{target:"fakedut"} subscription:{path:{origin:"openconfig" elem:{name:"system"} elem:{name:"config"} elem:{name:"hostname"}}} subscription:{path:{origin:"openconfig" elem:{name:"system"} elem:{name:"config"} elem:{name:"domain-name"}}} subscription:{path:{origin:"openconfig" elem:{name:"system"} elem:{name:"config"} elem:{name:"motd-banner"}}} subscription:{path:{origin:"openconfig" elem:{name:"system"} elem:{name:"config"} elem:{name:"login-banner"}}} encoding:PROTO}
I0204 16:42:32.515873    1530 subscribe.go:283] peer: <nil> target: "fakedut" subscription: subscribe:{prefix:{target:"fakedut"} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"global"} elem:{name:"config"} elem:{name:"as"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"global"} elem:{name:"config"} elem:{name:"router-id"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"config"} elem:{name:"peer-as"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"config"} elem:{name:"neighbor-address"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"config"} elem:{name:"neighbor-port"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"transport"} elem:{name:"config"} elem:{name:"local-address"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"as-path-options"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"policy-definitions"} elem:{name:"policy-definition" key:{key:"name" value:"*"}} elem:{name:"config"} elem:{name:"name"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"policy-definitions"} elem:{name:"policy-definition" key:{key:"name" value:"*"}} elem:{name:"statements"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"apply-policy"} elem:{name:"config"} elem:{name:"default-import-policy"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"apply-policy"} elem:{name:"config"} elem:{name:"default-export-policy"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"apply-policy"} elem:{name:"config"} elem:{name:"import-policy"}}} subscription:{path:{origin:"openconfig" elem:{name:"network-instances"} elem:{name:"network-instance" key:{key:"name" value:"DEFAULT"}} elem:{name:"protocols"} elem:{name:"protocol" key:{key:"identifier" value:"BGP"} key:{key:"name" value:"BGP"}} elem:{name:"bgp"} elem:{name:"neighbors"} elem:{name:"neighbor" key:{key:"neighbor-address" value:"*"}} elem:{name:"apply-policy"} elem:{name:"config"} elem:{name:"export-policy"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"prefix-sets"} elem:{name:"prefix-set" key:{key:"name" value:"*"}} elem:{name:"config"} elem:{name:"name"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"prefix-sets"} elem:{name:"prefix-set" key:{key:"name" value:"*"}} elem:{name:"config"} elem:{name:"mode"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"prefix-sets"} elem:{name:"prefix-set" key:{key:"name" value:"*"}} elem:{name:"prefixes"} elem:{name:"prefix" key:{key:"ip-prefix" value:"*"} key:{key:"masklength-range" value:"*"}} elem:{name:"config"} elem:{name:"ip-prefix"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"prefix-sets"} elem:{name:"prefix-set" key:{key:"name" value:"*"}} elem:{name:"prefixes"} elem:{name:"prefix" key:{key:"ip-prefix" value:"*"} key:{key:"masklength-range" value:"*"}} elem:{name:"config"} elem:{name:"masklength-range"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"bgp-defined-sets"} elem:{name:"community-sets"} elem:{name:"community-set" key:{key:"community-set-name" value:"*"}} elem:{name:"config"} elem:{name:"community-set-name"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"bgp-defined-sets"} elem:{name:"community-sets"} elem:{name:"community-set" key:{key:"community-set-name" value:"*"}} elem:{name:"config"} elem:{name:"community-member"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"bgp-defined-sets"} elem:{name:"community-sets"} elem:{name:"community-set" key:{key:"community-set-name" value:"*"}} elem:{name:"config"} elem:{name:"match-set-options"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"bgp-defined-sets"} elem:{name:"as-path-sets"} elem:{name:"as-path-set" key:{key:"as-path-set-name" value:"*"}} elem:{name:"config"} elem:{name:"as-path-set-name"}}} subscription:{path:{origin:"openconfig" elem:{name:"routing-policy"} elem:{name:"defined-sets"} elem:{name:"bgp-defined-sets"} elem:{name:"as-path-sets"} elem:{name:"as-path-set" key:{key:"as-path-set-name" value:"*"}} elem:{name:"config"} elem:{name:"as-path-set-member"}}} encoding:PROTO}
I0204 16:42:32.536895    1530 lemming.go:322] lemming created
I0204 16:42:32.537086    1530 lemming.go:66] lemming initialization complete

Hope that helps others!

@DanG100
Copy link
Collaborator

DanG100 commented Feb 11, 2025

Thanks for looking into this. To run lemming with the full dataplane functionality, libpcap-dev is required. I'll update the documentation.

go run combines both compiling the package and then running executable. With low memory, compilation is very slow due the large amount of generation code in lemming. Once compile, the base memory and cpu requirement is much less.

It can be easier to separate the two steps go build ./cmd/lemming and executing lemming ./lemming

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants