From f45a5665cf813562e60cc4bf4e9cde189645243d Mon Sep 17 00:00:00 2001 From: Johannes Kimmel Date: Tue, 14 Dec 2021 15:23:45 +0100 Subject: [PATCH] simplify setting up the network connection --- main.go | 7 +------ packet/packet.go | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index dbfe5d0..9eae32d 100644 --- a/main.go +++ b/main.go @@ -28,16 +28,11 @@ func parseOpts() (options, error) { } func run(opt options) error { - conn, err := packet.ListenPort(opt.Port) + conn, err := packet.Listen(opt.Group, opt.Port, opt.Ifs...) if err != nil { return err } defer conn.Close() - for _, iface := range opt.Ifs { - if err = conn.JoinGroup(iface, opt.Group); err != nil { - return err - } - } buf := [4096]byte{} var s tlv.PacketDecoder diff --git a/packet/packet.go b/packet/packet.go index b7c74bb..23cc225 100644 --- a/packet/packet.go +++ b/packet/packet.go @@ -18,6 +18,19 @@ type Conn struct { v6pc *ipv6.PacketConn } +func Listen(group string, port uint16, ifaces ...string) (Conn, error) { + conn, err := ListenPort(port) + if err != nil { + return Conn{}, err + } + for _, iface := range ifaces { + if err = conn.JoinGroup(iface, group); err != nil { + conn.Close() + return Conn{}, err + } + } + return conn, nil +} func ListenPort(port uint16) (Conn, error) { var c Conn @@ -27,7 +40,9 @@ func ListenPort(port uint16) (Conn, error) { } c.v6pc = ipv6.NewPacketConn(uc) - return c, c.v6pc.SetControlMessage(ipv6.FlagDst, true) + return c, c.v6pc.SetControlMessage( + ipv6.FlagDst|ipv6.FlagTrafficClass|ipv6.FlagHopLimit|ipv6.FlagPathMTU, + true) } func (c Conn) Close() error {