MCPcopy Index your code
hub / github.com/tailscale/tailscale / makeUDP4PacketBuffer

Function makeUDP4PacketBuffer

wgengine/netstack/netstack_test.go:1377–1413  ·  view source on GitHub ↗
(src, dst netip.AddrPort)

Source from the content-addressed store, hash-verified

1375}
1376
1377func makeUDP4PacketBuffer(src, dst netip.AddrPort) *stack.PacketBuffer {
1378 if !src.Addr().Is4() || !dst.Addr().Is4() {
1379 panic("src and dst must be IPv4")
1380 }
1381
1382 data := []byte("hello world\n")
1383
1384 packetLen := header.IPv4MinimumSize + header.UDPMinimumSize
1385 pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{
1386 ReserveHeaderBytes: packetLen,
1387 Payload: buffer.MakeWithData(data),
1388 })
1389
1390 // Initialize the UDP header.
1391 udp := header.UDP(pkt.TransportHeader().Push(header.UDPMinimumSize))
1392 pkt.TransportProtocolNumber = header.UDPProtocolNumber
1393
1394 length := uint16(pkt.Size())
1395 udp.Encode(&header.UDPFields{
1396 SrcPort: src.Port(),
1397 DstPort: dst.Port(),
1398 Length: length,
1399 })
1400
1401 // Add IP header
1402 ipHdr := header.IPv4(pkt.NetworkHeader().Push(header.IPv4MinimumSize))
1403 pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber
1404 ipHdr.Encode(&header.IPv4Fields{
1405 TotalLength: uint16(packetLen),
1406 Protocol: uint8(header.UDPProtocolNumber),
1407 SrcAddr: tcpip.AddrFrom4(src.Addr().As4()),
1408 DstAddr: tcpip.AddrFrom4(dst.Addr().As4()),
1409 Checksum: 0,
1410 })
1411
1412 return pkt
1413}
1414
1415func makeUDP6PacketBuffer(src, dst netip.AddrPort) *stack.PacketBuffer {
1416 if !src.Addr().Is6() || !dst.Addr().Is6() {

Callers 3

TestShouldSendToHostFunction · 0.85
TestIsSelfDstFunction · 0.85
TestDeliverLoopbackFunction · 0.85

Calls 8

TransportHeaderMethod · 0.80
EncodeMethod · 0.80
IPv4Method · 0.80
NetworkHeaderMethod · 0.80
PushMethod · 0.65
AddrMethod · 0.45
SizeMethod · 0.45
PortMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…