code: func (p *Prefix) UnmarshalBinary(b []byte) error {
  	if p.IP.To4() != nil {
  		binary.BigEndian.PutUint32(p.Mask, mask32(int(b[0])))
  		copy(p.IP, net.IPv4zero)
  		copy(p.IP.To4(), b[1:])
  	}
  	if p.IP.To16() != nil && p.IP.To4() == nil {
  		var m ipv6Int
  		m.mask(int(b[0]))
  		binary.BigEndian.PutUint64(p.Mask[:8], m[0])
  		binary.BigEndian.PutUint64(p.Mask[8:16], m[1])
  		copy(p.IP, net.IPv6unspecified)
  		copy(p.IP, b[1:])
  	}
  	return nil
  }
docs: // UnmarshalBinary replaces p with the BGP NLRI binary form b.