code: func (i *IAAddr) MarshalBinary() ([]byte, error) {
  	// 16 bytes: IPv6 address
  	//  4 bytes: preferred lifetime
  	//  4 bytes: valid lifetime
  	//  N bytes: options
  	b := buffer.New(nil)
  
  	copy(b.WriteN(net.IPv6len), i.IP)
  	b.Write32(uint32(i.PreferredLifetime / time.Second))
  	b.Write32(uint32(i.ValidLifetime / time.Second))
  	opts, err := i.Options.MarshalBinary()
  	if err != nil {
  		return nil, err
  	}
  	b.WriteBytes(opts)
  
  	return b.Data(), nil
  }
docs: // MarshalBinary allocates a byte slice containing the data from a IAAddr.