(src, dst netip.AddrPort)
| 1375 | } |
| 1376 | |
| 1377 | func 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 | |
| 1415 | func makeUDP6PacketBuffer(src, dst netip.AddrPort) *stack.PacketBuffer { |
| 1416 | if !src.Addr().Is6() || !dst.Addr().Is6() { |
no test coverage detected
searching dependent graphs…