рабочий вариант, но скороть 10 МБит
This commit is contained in:
@@ -35,6 +35,9 @@ type FabricPacketTransport struct {
|
||||
Inbox *FabricPacketInbox
|
||||
|
||||
ClusterID string
|
||||
TunnelID string
|
||||
PoolID string
|
||||
ServiceID string
|
||||
VPNConnectionID string
|
||||
RouteID string
|
||||
LocalNodeID string
|
||||
@@ -46,16 +49,16 @@ type FabricPacketTransport struct {
|
||||
}
|
||||
|
||||
type FabricClientPacketIngress struct {
|
||||
ForwardTransport mesh.ProductionForwardTransport
|
||||
Inbox *FabricPacketInbox
|
||||
Routes func() []mesh.SyntheticRoute
|
||||
LocalGateway func(vpnConnectionID string) bool
|
||||
AllowLegacyLocalGatewayFallback bool
|
||||
FlowScheduler *FabricFlowScheduler
|
||||
MaxParallelFlowSends int
|
||||
RecoveryPolicyFingerprint string
|
||||
AdaptivePolicyFingerprint string
|
||||
PreventLastRouteWithdrawal bool
|
||||
ForwardTransport mesh.ProductionForwardTransport
|
||||
Inbox *FabricPacketInbox
|
||||
Routes func() []mesh.SyntheticRoute
|
||||
LocalGateway func(vpnConnectionID string) bool
|
||||
AllowLocalGatewayBypass bool
|
||||
FlowScheduler *FabricFlowScheduler
|
||||
MaxParallelFlowSends int
|
||||
RecoveryPolicyFingerprint string
|
||||
AdaptivePolicyFingerprint string
|
||||
PreventLastRouteWithdrawal bool
|
||||
|
||||
ClusterID string
|
||||
LocalNodeID string
|
||||
@@ -159,6 +162,7 @@ type FabricServiceChannelAdaptivePolicy struct {
|
||||
|
||||
const (
|
||||
FabricTrafficClassControl = "control"
|
||||
FabricTrafficClassDNS = "dns"
|
||||
FabricTrafficClassInteractive = "interactive"
|
||||
FabricTrafficClassReliable = "reliable"
|
||||
FabricTrafficClassBulk = "bulk"
|
||||
@@ -370,6 +374,7 @@ func defaultFabricServiceChannelAdaptivePolicy() FabricServiceChannelAdaptivePol
|
||||
QueuePressureMaxInFlight: defaultFabricFlowParallelSendWindow * 4,
|
||||
ClassWindows: map[string]int{
|
||||
FabricTrafficClassControl: defaultFabricFlowParallelSendWindow,
|
||||
FabricTrafficClassDNS: defaultFabricFlowParallelSendWindow,
|
||||
FabricTrafficClassInteractive: defaultFabricFlowParallelSendWindow,
|
||||
FabricTrafficClassReliable: 6,
|
||||
FabricTrafficClassBulk: 4,
|
||||
@@ -399,6 +404,7 @@ func normalizeFabricServiceChannelAdaptivePolicy(policy FabricServiceChannelAdap
|
||||
}
|
||||
defaults := map[string]int{
|
||||
FabricTrafficClassControl: policy.MaxParallelWindow,
|
||||
FabricTrafficClassDNS: policy.MaxParallelWindow,
|
||||
FabricTrafficClassInteractive: policy.MaxParallelWindow,
|
||||
FabricTrafficClassReliable: minPositive(policy.MaxParallelWindow, 6),
|
||||
FabricTrafficClassBulk: minPositive(policy.MaxParallelWindow, 4),
|
||||
@@ -466,7 +472,7 @@ func (s *FabricFlowScheduler) scheduleClientPackets(vpnConnectionID string, traf
|
||||
FlowID: flowID,
|
||||
Shard: shard,
|
||||
TrafficClass: trafficClass,
|
||||
Classifier: "ip_5tuple_or_packet_hash",
|
||||
Classifier: "opaque_packet_hash",
|
||||
ServiceMode: "application_protocol_agnostic",
|
||||
}
|
||||
grouped[channelID] = batch
|
||||
@@ -1277,6 +1283,8 @@ func normalizeFabricTrafficClass(value string) string {
|
||||
switch strings.TrimSpace(strings.ToLower(value)) {
|
||||
case FabricTrafficClassControl:
|
||||
return FabricTrafficClassControl
|
||||
case FabricTrafficClassDNS:
|
||||
return FabricTrafficClassDNS
|
||||
case FabricTrafficClassInteractive:
|
||||
return FabricTrafficClassInteractive
|
||||
case FabricTrafficClassReliable:
|
||||
@@ -1294,16 +1302,18 @@ func fabricTrafficClassPriority(value string) int {
|
||||
switch normalizeFabricTrafficClass(value) {
|
||||
case FabricTrafficClassControl:
|
||||
return 0
|
||||
case FabricTrafficClassInteractive:
|
||||
case FabricTrafficClassDNS:
|
||||
return 1
|
||||
case FabricTrafficClassReliable:
|
||||
case FabricTrafficClassInteractive:
|
||||
return 2
|
||||
case FabricTrafficClassReliable:
|
||||
return 3
|
||||
case FabricTrafficClassBulk:
|
||||
return 3
|
||||
case FabricTrafficClassDroppable:
|
||||
return 4
|
||||
case FabricTrafficClassDroppable:
|
||||
return 5
|
||||
default:
|
||||
return 3
|
||||
return 4
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1932,7 +1942,7 @@ func (i *FabricClientPacketIngress) ReceiveClientPacketBatch(ctx context.Context
|
||||
}
|
||||
|
||||
func (i *FabricClientPacketIngress) localGatewayReady(vpnConnectionID string) bool {
|
||||
if i == nil || !i.AllowLegacyLocalGatewayFallback || i.inbox() == nil || vpnConnectionID == "" {
|
||||
if i == nil || !i.AllowLocalGatewayBypass || i.inbox() == nil || vpnConnectionID == "" {
|
||||
return false
|
||||
}
|
||||
localGateway := i.localGateway()
|
||||
@@ -2224,9 +2234,6 @@ func (i *FabricPacketInbox) Receive(ctx context.Context, vpnConnectionID, direct
|
||||
func (i *FabricPacketInbox) enqueue(payload mesh.VPNPacketBatchPayload) error {
|
||||
queue := i.queue(payload.VPNConnectionID, payload.Direction)
|
||||
target := queue.normal
|
||||
if payload.Direction == FabricDirectionGatewayToClient && batchHasTCPControlPacket(payload.Packets) {
|
||||
target = queue.priority
|
||||
}
|
||||
select {
|
||||
case target <- payload:
|
||||
default:
|
||||
@@ -2256,15 +2263,6 @@ func (i *FabricPacketInbox) queue(vpnConnectionID, direction string) *fabricPack
|
||||
return queue
|
||||
}
|
||||
|
||||
func batchHasTCPControlPacket(packets [][]byte) bool {
|
||||
for _, packet := range packets {
|
||||
if isTCPControlPacket(packet) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func maxInt(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
@@ -2976,7 +2974,7 @@ func classifyPacketFlow(packet []byte, shardCount int) (string, int) {
|
||||
if shardCount <= 0 {
|
||||
shardCount = defaultFabricFlowShardCount
|
||||
}
|
||||
key := packetFlowKey(packet)
|
||||
key := packetHashFlowKey("opaque", packet)
|
||||
hash := fnv.New32a()
|
||||
_, _ = hash.Write([]byte(key))
|
||||
shard := int(hash.Sum32() % uint32(shardCount))
|
||||
|
||||
Reference in New Issue
Block a user