Add utility functions

This commit is contained in:
Owen
2025-11-23 17:07:40 -05:00
parent 025c94e586
commit 61b9615aea
2 changed files with 55 additions and 6 deletions

View File

@@ -180,9 +180,9 @@ func NewWireGuardService(interfaceName string, mtu int, generateAndSaveKeyTo str
wsClient.RegisterHandler("newt/wg/peer/add", service.handleAddPeer)
wsClient.RegisterHandler("newt/wg/peer/remove", service.handleRemovePeer)
wsClient.RegisterHandler("newt/wg/peer/update", service.handleUpdatePeer)
wsClient.RegisterHandler("newt/wg/target/add", service.handleAddTarget)
wsClient.RegisterHandler("newt/wg/target/remove", service.handleRemoveTarget)
wsClient.RegisterHandler("newt/wg/target/update", service.handleUpdateTarget)
wsClient.RegisterHandler("newt/wg/targets/add", service.handleAddTarget)
wsClient.RegisterHandler("newt/wg/targets/remove", service.handleRemoveTarget)
wsClient.RegisterHandler("newt/wg/targets/update", service.handleUpdateTarget)
return service, nil
}
@@ -482,7 +482,7 @@ func (s *WireGuardService) ensureTargets(targets []Target) error {
s.tnet.AddProxySubnetRule(sourcePrefix, destPrefix, portRanges)
logger.Info("Added target subnet %s with port ranges: %v", target.SourcePrefix, target.PortRange)
logger.Info("Added target subnet from %s to %s with port ranges: %v", target.SourcePrefix, target.DestPrefix, target.PortRange)
}
return nil
@@ -874,7 +874,7 @@ func (s *WireGuardService) handleAddTarget(msg websocket.WSMessage) {
s.tnet.AddProxySubnetRule(sourcePrefix, destPrefix, portRanges)
logger.Info("Added target subnet %s with port ranges: %v", target.SourcePrefix, target.PortRange)
logger.Info("Added target subnet from %s to %s with port ranges: %v", target.SourcePrefix, target.DestPrefix, target.PortRange)
}
}
@@ -916,7 +916,7 @@ func (s *WireGuardService) handleRemoveTarget(msg websocket.WSMessage) {
s.tnet.RemoveProxySubnetRule(sourcePrefix, destPrefix)
logger.Info("Removed target subnet %s", target.SourcePrefix)
logger.Info("Removed target subnet %s with destination %s", target.SourcePrefix, target.DestPrefix)
}
}
@@ -962,6 +962,7 @@ func (s *WireGuardService) handleUpdateTarget(msg websocket.WSMessage) {
}
s.tnet.RemoveProxySubnetRule(sourcePrefix, destPrefix)
logger.Info("Removed target subnet %s with destination %s", target.SourcePrefix, target.DestPrefix)
}
for _, target := range requests.NewTargets {
@@ -987,6 +988,7 @@ func (s *WireGuardService) handleUpdateTarget(msg websocket.WSMessage) {
}
s.tnet.AddProxySubnetRule(sourcePrefix, destPrefix, portRanges)
logger.Info("Added target subnet from %s to %s with port ranges: %v", target.SourcePrefix, target.DestPrefix, target.PortRange)
}
}

View File

@@ -2,6 +2,7 @@ package util
import (
"encoding/base64"
"encoding/binary"
"encoding/hex"
"fmt"
"net"
@@ -152,3 +153,49 @@ func MapToWireGuardLogLevel(level logger.LogLevel) int {
return device.LogLevelSilent
}
}
// GetProtocol returns protocol number from IPv4 packet (fast path)
func GetProtocol(packet []byte) (uint8, bool) {
if len(packet) < 20 {
return 0, false
}
version := packet[0] >> 4
if version == 4 {
return packet[9], true
} else if version == 6 {
if len(packet) < 40 {
return 0, false
}
return packet[6], true
}
return 0, false
}
// GetDestPort returns destination port from TCP/UDP packet (fast path)
func GetDestPort(packet []byte) (uint16, bool) {
if len(packet) < 20 {
return 0, false
}
version := packet[0] >> 4
var headerLen int
if version == 4 {
ihl := packet[0] & 0x0F
headerLen = int(ihl) * 4
if len(packet) < headerLen+4 {
return 0, false
}
} else if version == 6 {
headerLen = 40
if len(packet) < headerLen+4 {
return 0, false
}
} else {
return 0, false
}
// Destination port is at bytes 2-3 of TCP/UDP header
port := binary.BigEndian.Uint16(packet[headerLen+2 : headerLen+4])
return port, true
}