From 8cafc52e7974fd263fcfad2cbf7e0113bb1fad27 Mon Sep 17 00:00:00 2001 From: Kioubit Date: Mon, 27 Feb 2023 21:58:45 +0200 Subject: [PATCH] Unified error handling --- pndp/flow.go | 12 ++++++------ pndp/interface.go | 10 +++++----- pndp/interfaceMon.go | 8 ++++---- pndp/listener.go | 10 +++++----- pndp/responder.go | 8 ++++---- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pndp/flow.go b/pndp/flow.go index bc733a7..1feacc6 100644 --- a/pndp/flow.go +++ b/pndp/flow.go @@ -40,7 +40,7 @@ func NewResponder(iface string, filter []*net.IPNet, autosenseInterface string) fmt.Println("WARNING: You should use a whitelist for the responder unless you really know what you are doing") } if !isValidNetworkInterface(iface, autosenseInterface) { - showError("No such network interface") + showFatalError("No such network interface") } var s sync.WaitGroup @@ -79,7 +79,7 @@ func (obj *ResponderObj) start() { stopInterfaceMon() } -//Stop a running Responder instance +// Stop a running Responder instance // Returns false on error func (obj *ResponderObj) Stop() bool { close(obj.stopChan) @@ -103,7 +103,7 @@ func (obj *ResponderObj) Stop() bool { func NewProxy(iface1 string, iface2 string, filter []*net.IPNet, autosenseInterface string) *ProxyObj { if !isValidNetworkInterface(iface1, iface2, autosenseInterface) { - showError("No such network interface") + showFatalError("No such network interface") } var s sync.WaitGroup @@ -166,7 +166,7 @@ func (obj *ProxyObj) start() { stopInterfaceMon() } -//Stop a running Proxy instance +// Stop a running Proxy instance // Returns false on error func (obj *ProxyObj) Stop() bool { close(obj.stopChan) @@ -190,7 +190,7 @@ func ParseFilter(f string) []*net.IPNet { for i, n := range s { _, cidr, err := net.ParseCIDR(n) if err != nil { - showError("filter:", err.Error()) + showFatalError("filter:", err.Error()) } result[i] = cidr } @@ -224,7 +224,7 @@ func isValidNetworkInterface(iface ...string) bool { return true } -func showError(error ...string) { +func showFatalError(error ...string) { fmt.Printf("Error: ") for _, err := range error { fmt.Printf(err + " ") diff --git a/pndp/interface.go b/pndp/interface.go index 83bfdd4..b001ed8 100644 --- a/pndp/interface.go +++ b/pndp/interface.go @@ -45,14 +45,14 @@ func setPromisc(fd int, iface string, enable bool, withInterfaceFlags bool) { if withInterfaceFlags { tFD, err := syscall.Socket(syscall.AF_INET6, syscall.SOCK_DGRAM, 0) if err != nil { - panic(err) + showFatalError(err.Error()) } var ifl iflags copy(ifl.name[:], []byte(iface)) _, _, ep := syscall.Syscall(syscall.SYS_IOCTL, uintptr(tFD), syscall.SIOCGIFFLAGS, uintptr(unsafe.Pointer(&ifl))) if ep != 0 { - panic(ep) + showFatalError(ep.Error()) } if enable { @@ -63,7 +63,7 @@ func setPromisc(fd int, iface string, enable bool, withInterfaceFlags bool) { _, _, ep = syscall.Syscall(syscall.SYS_IOCTL, uintptr(tFD), syscall.SIOCSIFFLAGS, uintptr(unsafe.Pointer(&ifl))) if ep != 0 { - panic(ep) + showFatalError(ep.Error()) } _ = syscall.Close(tFD) @@ -73,7 +73,7 @@ func setPromisc(fd int, iface string, enable bool, withInterfaceFlags bool) { // -------------------------- Socket Options --------------------------- iFace, err := net.InterfaceByName(iface) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } mReq := unix.PacketMreq{ @@ -90,7 +90,7 @@ func setPromisc(fd int, iface string, enable bool, withInterfaceFlags bool) { err = unix.SetsockoptPacketMreq(fd, unix.SOL_PACKET, opt, &mReq) if err != nil { - panic(err) + showFatalError(err.Error()) } // --------------------------------------------------------------------- } diff --git a/pndp/interfaceMon.go b/pndp/interfaceMon.go index 36f9024..f956f29 100644 --- a/pndp/interfaceMon.go +++ b/pndp/interfaceMon.go @@ -23,7 +23,7 @@ func startInterfaceMon() { s = make(chan interface{}) err := getInterfaceUpdates(u, s) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } go getUpdates() } @@ -79,7 +79,7 @@ func getUpdates() { type monInterface struct { addCount int - sourceIP []byte //TODO ULA and GUA + sourceIP []byte //TODO ULA networks []*net.IPNet iface *net.Interface autosense bool @@ -99,7 +99,7 @@ func addInterfaceToMon(iface string, autosense bool) { niface, err := net.InterfaceByName(iface) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } for i := range monInterfaceList { @@ -131,7 +131,7 @@ func removeInterfaceFromMon(iface string) { defer monMutex.Unlock() niface, err := net.InterfaceByName(iface) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } for i := range monInterfaceList { if monInterfaceList[i].iface.Name == niface.Name { diff --git a/pndp/listener.go b/pndp/listener.go index 0701144..a8eab17 100644 --- a/pndp/listener.go +++ b/pndp/listener.go @@ -21,7 +21,7 @@ func listen(iface string, responder chan *ndpRequest, requestType ndpType, stopW niface, err := net.InterfaceByName(iface) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } tiface := &syscall.SockaddrLinklayer{ Protocol: htons16(syscall.ETH_P_IPV6), @@ -43,12 +43,12 @@ func listen(iface string, responder chan *ndpRequest, requestType ndpType, stopW } if len([]byte(iface)) > syscall.IFNAMSIZ { - panic("Interface size larger then maximum allowed by the kernel") + showFatalError("Interface size larger then maximum allowed by the kernel") } err = syscall.Bind(fd, tiface) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } setPromisc(fd, iface, true, false) @@ -83,14 +83,14 @@ func listen(iface string, responder chan *ndpRequest, requestType ndpType, stopW err = f.ApplyTo(fd) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } for { buf := make([]byte, 86) numRead, err := syscall.Read(fd, buf) if err != nil { - panic(err) + showFatalError(err.Error()) } if numRead < 78 { if GlobalDebug { diff --git a/pndp/responder.go b/pndp/responder.go index 612fd21..73ccce3 100644 --- a/pndp/responder.go +++ b/pndp/responder.go @@ -17,7 +17,7 @@ func respond(iface string, requests chan *ndpRequest, respondType ndpType, ndpQu var err error autoiface, err = net.InterfaceByName(autoSense) if err != nil { - panic(err) + showFatalError(err.Error()) } } @@ -26,19 +26,19 @@ func respond(iface string, requests chan *ndpRequest, respondType ndpType, ndpQu fd, err := syscall.Socket(syscall.AF_INET6, syscall.SOCK_RAW, syscall.IPPROTO_RAW) if err != nil { - panic(err) + showFatalError(err.Error()) } defer func(fd int) { _ = syscall.Close(fd) }(fd) err = syscall.BindToDevice(fd, iface) if err != nil { - panic(err) + showFatalError(err.Error()) } respondIface, err := net.InterfaceByName(iface) if err != nil { - panic(err.Error()) + showFatalError(err.Error()) } //var result = selectSourceIP(respondIface)