func (i *IE) HasDI() bool {
	if i.Type != RemoteGTPUPeer {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has3rdBit(i.Payload[0])
}
HasDI reports whether an IE has DI bit.
package ie
import (
	"encoding/binary"
	"io"
	"net"
)
func NewRemoteGTPUPeer(flags uint8, v4, v6 string, di uint8, ni string) *IE {
	fields := NewRemoteGTPUPeerFields(flags, v4, v6, di, ni)
	b, err := fields.Marshal()
	if err != nil {
		return nil
	}
	return New(RemoteGTPUPeer, b)
}
func (i *IE) RemoteGTPUPeer() (*RemoteGTPUPeerFields, error) {
	switch i.Type {
	case RemoteGTPUPeer:
		fields, err := ParseRemoteGTPUPeerFields(i.Payload)
		if err != nil {
			return nil, err
		}
		return fields, nil
	case UserPlanePathFailureReport:
		ies, err := i.UserPlanePathFailureReport()
		if err != nil {
			return nil, err
		}
		for _, x := range ies {
			if x.Type == RemoteGTPUPeer {
				return x.RemoteGTPUPeer()
			}
		}
		return nil, ErrIENotFound
	case UserPlanePathRecoveryReport:
		ies, err := i.UserPlanePathRecoveryReport()
		if err != nil {
			return nil, err
		}
		for _, x := range ies {
			if x.Type == RemoteGTPUPeer {
				return x.RemoteGTPUPeer()
			}
		}
		return nil, ErrIENotFound
	case GTPUPathQoSControlInformation:
		ies, err := i.GTPUPathQoSControlInformation()
		if err != nil {
			return nil, err
		}
		for _, x := range ies {
			if x.Type == RemoteGTPUPeer {
				return x.RemoteGTPUPeer()
			}
		}
		return nil, ErrIENotFound
	case GTPUPathQoSReport:
		ies, err := i.GTPUPathQoSReport()
		if err != nil {
			return nil, err
		}
		for _, x := range ies {
			if x.Type == RemoteGTPUPeer {
				return x.RemoteGTPUPeer()
			}
		}
		return nil, ErrIENotFound
	default:
		return nil, &InvalidTypeError{Type: i.Type}
	}
}
func (i *IE) HasNI() bool {
	if i.Type != RemoteGTPUPeer {
		return false
	}
	if len(i.Payload) < 1 {
		return false
	}
	return has4thBit(i.Payload[0])
}