code: func (e *endpoint) makeOptions(sackBlocks []header.SACKBlock) []byte {
  	options := getOptions()
  	offset := 0
  
  	// N.B. the ordering here matches the ordering used by Linux internally
  	// and described in the raw makeOptions function. We don't include
  	// unnecessary cases here (post connection.)
  	if e.sendTSOk {
  		// Embed the timestamp if timestamp has been enabled.
  		//
  		// We only use the lower 32 bits of the unix time in
  		// milliseconds. This is similar to what Linux does where it
  		// uses the lower 32 bits of the jiffies value in the tsVal
  		// field of the timestamp option.
  		//
  		// Further, RFC7323 section-5.4 recommends millisecond
  		// resolution as the lowest recommended resolution for the
  		// timestamp clock.
  		//
  		// Ref: https://tools.ietf.org/html/rfc7323#section-5.4.
  		offset += header.EncodeNOP(options[offset:])
  		offset += header.EncodeNOP(options[offset:])
  		offset += header.EncodeTSOption(e.timestamp(), uint32(e.recentTS), options[offset:])
  	}
  	if e.sackPermitted && len(sackBlocks) > 0 {
  		offset += header.EncodeNOP(options[offset:])
  		offset += header.EncodeNOP(options[offset:])
  		offset += header.EncodeSACKBlocks(sackBlocks, options[offset:])
  	}
  
  	// We expect the above to produce an aligned offset.
  	if delta := header.AddTCPOptionPadding(options, offset); delta != 0 {
  		panic("unexpected option encoding")
  	}
  
  	return options[:offset]
  }
docs: // makeOptions makes an options slice.