// UnmarshalBinary allocates a byte slice and marshals a Frame into binary form. // // If a VNI value is invalid, ErrInvalidVNI will be returned. func (f *Frame) UnmarshalBinary(b []byte) error { // Need at least VXLAN frame and empty Ethernet frame if len(b) < 18 { return io.ErrUnexpectedEOF } // I flag must be set to 1. if (b[0] >> 3) != 1 { return ErrInvalidFrame } f.VNI = VNI(binary.BigEndian.Uint32(b[3:])) ef := new(ethernet.Frame) if err := ef.UnmarshalFCS(b[8:]); err != nil { return err } f.Ethernet = ef return nil }