Skip to content

Check UE IP Address using SD flag instead of Source Interface #65

@louisroyer

Description

@louisroyer

func checkUEIPAddress(ueipaddress *ie.UEIPAddressFields, sourceInterface uint8, pdu []byte) (res bool, err error) {
var srcpdu net.IP
var dstpdu net.IP
ueIpAddressIE := ie.NewUEIPAddress(ueipaddress.Flags, ueipaddress.IPv4Address.String(), ueipaddress.IPv6Address.String(), ueipaddress.IPv6PrefixDelegationBits, ueipaddress.IPv6PrefixLength)
if waterutil.IsIPv4(pdu) {
p := gopacket.NewPacket(pdu, layers.LayerTypeIPv4, gopacket.Default).NetworkLayer().(*layers.IPv4)
srcpdu = p.SrcIP
dstpdu = p.DstIP
} else if waterutil.IsIPv6(pdu) {
p := gopacket.NewPacket(pdu, layers.LayerTypeIPv6, gopacket.Default).NetworkLayer().(*layers.IPv6)
srcpdu = p.SrcIP
dstpdu = p.DstIP
} else {
return false, fmt.Errorf("PDU is not IPv4 or IPv6")
}
if ueipaddress == nil {
return false, fmt.Errorf("Invalid UE IP Address")
}
if sourceInterface == ie.SrcInterfaceAccess {
// check ip src field
if ueIpAddressIE.HasIPv4() && ueipaddress.IPv4Address.Equal(srcpdu) {
return true, nil
}
if ueIpAddressIE.HasIPv6() && ueipaddress.IPv6Address.Equal(srcpdu) {
return true, nil
}
} else {
// check ip dst field
if ueIpAddressIE.HasIPv4() && ueipaddress.IPv4Address.Equal(dstpdu) {
return true, nil
}
if ueIpAddressIE.HasIPv6() && ueipaddress.IPv6Address.Equal(dstpdu) {
return true, nil
}
}
return false, nil
}

Bit 3 – S/D: This bit is only applicable to the UE IP Address IE in the PDI IE. It shall be set to "0" and ignored by the receiver in IEs other than PDI IE. In the PDI IE, if this bit is set to "0", this indicates a Source IP address; if this bit is set to "1", this indicates a Destination IP address.
(TS 29.244 V17.4.0, section 8.2.62 "UE IP Address", p. 279)

Must be tested against:

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions