diff --git a/internal/gre/gre.go b/internal/gre/gre.go index 7cc4482..49666d9 100644 --- a/internal/gre/gre.go +++ b/internal/gre/gre.go @@ -16,7 +16,7 @@ func SetupGreTunnels( greIfaceName, parentIfaceName string, ueTunnelAddr, n3iwfTunnelAddr, pduAddr net.IP, qoSInfo *Qos.PDUQoSInfo, -) ([]netlink.Link, error) { +) (map[uint8]*netlink.Link, error) { parent, err := netlink.LinkByName(parentIfaceName) if err != nil { return nil, fmt.Errorf("netlink.LinkByName: [%+v] %+v", parentIfaceName, err) @@ -24,11 +24,13 @@ func SetupGreTunnels( if qoSInfo == nil { linkGre, err := SetupGreTunnel(greIfaceName, parent, ueTunnelAddr, n3iwfTunnelAddr, pduAddr, 0) - return []netlink.Link{linkGre}, err + return map[uint8]*netlink.Link{ + 1: &linkGre, + }, err } n3ueSelf := context.N3UESelf() - netlinks := []netlink.Link{} + netlinks := map[uint8]*netlink.Link{} for _, qfi := range qoSInfo.QfiList { linkGRE, err := SetupGreTunnel(greIfaceName, parent, ueTunnelAddr, n3iwfTunnelAddr, pduAddr, qfi) @@ -37,7 +39,8 @@ func SetupGreTunnels( } n3ueSelf.CreatedIface = append(n3ueSelf.CreatedIface, &linkGRE) - netlinks = append(netlinks, linkGRE) + netlinks[qfi] = &linkGRE + } return netlinks, nil } diff --git a/internal/nwucp/handler/handler.go b/internal/nwucp/handler/handler.go index 3512d5e..6767a93 100644 --- a/internal/nwucp/handler/handler.go +++ b/internal/nwucp/handler/handler.go @@ -57,17 +57,17 @@ func HandleDLNASTransport(n3ueSelf *context.N3UE, nasMsg *nas.Message) { newGREName := fmt.Sprintf("%s-id-%d", n3ueSelf.N3ueInfo.GreIfaceName, n3ueSelf.N3ueInfo.XfrmiId) - var linkGREs []netlink.Link + var linkGREs map[uint8]*netlink.Link if linkGREs, err = gre.SetupGreTunnels(newGREName, n3ueSelf.TemporaryXfrmiName, n3ueSelf.UEInnerAddr.IP, n3ueSelf.TemporaryUPIPAddr, pduAddress, n3ueSelf.TemporaryQosInfo); err != nil { naslog.Errorf("Setup GRE tunnel %s Fail: %+v", newGREName, err) return } - // Add routes - // TODO: here we not ensure that linkGREs[0] is defalt path (QFI = 1) + // Add route + defaultGretunnel := *linkGREs[uint8(1)] upRoute := &netlink.Route{ - LinkIndex: linkGREs[0].Attrs().Index, + LinkIndex: defaultGretunnel.Attrs().Index, Dst: &net.IPNet{ IP: net.IPv4zero, Mask: net.IPv4Mask(0, 0, 0, 0),