in ptp/protocol/ptp4l.go [236:283]
func (e *UnicastMasterEntry) MarshalBinary() ([]byte, error) {
var bytes bytes.Buffer
if err := binary.Write(&bytes, binary.BigEndian, e.PortIdentity); err != nil {
return nil, err
}
if err := binary.Write(&bytes, binary.BigEndian, e.ClockQuality); err != nil {
return nil, err
}
var selectedBin uint8 = 0
if e.Selected {
selectedBin = 1
}
if err := binary.Write(&bytes, binary.BigEndian, selectedBin); err != nil {
return nil, err
}
if err := binary.Write(&bytes, binary.BigEndian, e.PortState); err != nil {
return nil, err
}
if err := binary.Write(&bytes, binary.BigEndian, e.Priority1); err != nil {
return nil, err
}
if err := binary.Write(&bytes, binary.BigEndian, e.Priority2); err != nil {
return nil, err
}
var pa PortAddress
asIPv4 := e.Address.To4()
if asIPv4 != nil {
pa = PortAddress{
NetworkProtocol: TransportTypeUDPIPV4,
AddressLength: 4,
AddressField: asIPv4,
}
} else {
pa = PortAddress{
NetworkProtocol: TransportTypeUDPIPV6,
AddressLength: 16,
AddressField: e.Address,
}
}
portBytes, err := pa.MarshalBinary()
if err != nil {
return nil, err
}
if err := binary.Write(&bytes, binary.BigEndian, portBytes); err != nil {
return nil, err
}
return bytes.Bytes(), nil
}