packetaddradaptar.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package tun
  2. import (
  3. "gvisor.dev/gvisor/pkg/tcpip"
  4. "gvisor.dev/gvisor/pkg/tcpip/stack"
  5. "github.com/v2fly/v2ray-core/v5/app/tun/device"
  6. "github.com/v2fly/v2ray-core/v5/app/tun/tunsorter"
  7. )
  8. func NewDeviceWithSorter(overlay device.Device, sorter *tunsorter.TunSorter) device.Device {
  9. return &packetAddrDevice{
  10. Device: overlay,
  11. sorter: sorter,
  12. }
  13. }
  14. type packetAddrDevice struct {
  15. device.Device
  16. sorter *tunsorter.TunSorter
  17. secondaryDispatcher stack.NetworkDispatcher
  18. }
  19. func (p *packetAddrDevice) DeliverNetworkPacket(protocol tcpip.NetworkProtocolNumber, pkt stack.PacketBufferPtr) {
  20. buf := pkt.ToBuffer()
  21. _, err := p.sorter.OnPacketReceived(buf.Flatten())
  22. if err != nil {
  23. p.secondaryDispatcher.DeliverNetworkPacket(protocol, pkt)
  24. }
  25. }
  26. func (p *packetAddrDevice) DeliverLinkPacket(protocol tcpip.NetworkProtocolNumber, pkt stack.PacketBufferPtr) {
  27. // TODO implement me
  28. panic("implement me")
  29. }
  30. func (p *packetAddrDevice) Attach(dispatcher stack.NetworkDispatcher) {
  31. p.secondaryDispatcher = dispatcher
  32. p.Device.Attach(p)
  33. }