wip: migrate to mono-repo. SPN has already been moved to spn/
This commit is contained in:
47
spn/ships/mtu.go
Normal file
47
spn/ships/mtu.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package ships
|
||||
|
||||
import "net"
|
||||
|
||||
// MTU Calculation Configuration.
|
||||
const (
|
||||
BaseMTU = 1460 // 1500 with 40 bytes extra space for special cases.
|
||||
IPv4HeaderMTUSize = 20 // Without options, as not common.
|
||||
IPv6HeaderMTUSize = 40 // Without options, as not common.
|
||||
TCPHeaderMTUSize = 60 // Maximum size with options.
|
||||
UDPHeaderMTUSize = 8 // Has no options.
|
||||
)
|
||||
|
||||
func (ship *ShipBase) calculateLoadSize(ip net.IP, addr net.Addr, subtract ...int) {
|
||||
ship.loadSize = BaseMTU
|
||||
|
||||
// Convert addr to IP if needed.
|
||||
if ip == nil && addr != nil {
|
||||
switch v := addr.(type) {
|
||||
case *net.TCPAddr:
|
||||
ip = v.IP
|
||||
case *net.UDPAddr:
|
||||
ip = v.IP
|
||||
case *net.IPAddr:
|
||||
ip = v.IP
|
||||
}
|
||||
}
|
||||
|
||||
// Subtract IP Header, if IP is available.
|
||||
if ip != nil {
|
||||
if ip4 := ip.To4(); ip4 != nil {
|
||||
ship.loadSize -= IPv4HeaderMTUSize
|
||||
} else {
|
||||
ship.loadSize -= IPv6HeaderMTUSize
|
||||
}
|
||||
}
|
||||
|
||||
// Subtract others.
|
||||
for sub := range subtract {
|
||||
ship.loadSize -= sub
|
||||
}
|
||||
|
||||
// Raise buf size to at least load size.
|
||||
if ship.bufSize < ship.loadSize {
|
||||
ship.bufSize = ship.loadSize
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user