docs/fix: README; fix BatchUpdate version requirement

This commit is contained in:
mzz2017 2023-02-04 18:27:13 +08:00
parent 69f897b7e9
commit dcf8021500
2 changed files with 44 additions and 29 deletions

View File

@ -51,8 +51,9 @@ Note that if you bind dae to WAN only, dae only provide network service for loca
1. Check dns upstream and source loop (whether upstream is also a client of us) and remind the user to add sip rule.
1. Domain routing performance optimization.
1. Handle the case that nodes do not support UDP.
1. Handle the case that nodes do not support IPv6.
1. L4Checksum problem.
1. Handle the case that nodes do not support UDP by adding `filter: l4proto_out(tcp, udp)`, and filter out those nodes support both TCP and UDP. Thus we can use routing to handle it.
1. Handle the case that nodes do not support IPv6 by adding `filter: ipversion_out(4, 6)`, and filter out those nodes support both IPv4 and IPv6. Thus we can use routing to handle it.
1. L4Checksum problem. Maybe it is hard to solve.
1. MACv2 extension extraction.
1. Log to userspace.
1. ...

View File

@ -71,21 +71,36 @@ func cidrToBpfLpmKey(prefix netip.Prefix) _bpfLpmKey {
var (
CheckBatchUpdateFeatureOnce sync.Once
SimulateBatchUpdate bool
SimulateBatchUpdateLpmTrie bool
)
func BatchUpdate(m *ebpf.Map, keys interface{}, values interface{}, opts *ebpf.BatchOptions) (n int, err error) {
CheckBatchUpdateFeatureOnce.Do(func() {
version, e := internal.KernelVersion()
if e != nil || version.Less(consts.UserspaceBatchUpdateFeatureVersion) {
if e != nil {
SimulateBatchUpdate = true
SimulateBatchUpdateLpmTrie = true
return
}
if version.Less(consts.UserspaceBatchUpdateFeatureVersion) {
SimulateBatchUpdate = true
}
if m.Type() == ebpf.LPMTrie && version.Less(consts.UserspaceBatchUpdateLpmTrieFeatureVersion) {
SimulateBatchUpdate = true
if version.Less(consts.UserspaceBatchUpdateLpmTrieFeatureVersion) {
SimulateBatchUpdateLpmTrie = true
}
})
if !SimulateBatchUpdate {
simulate := SimulateBatchUpdate
if m.Type() == ebpf.LPMTrie {
simulate = SimulateBatchUpdateLpmTrie
}
if !simulate {
// Genuine BatchUpdate
return m.BatchUpdate(keys, values, opts)
} else {
}
// Simulate
vKeys := reflect.ValueOf(keys)
if vKeys.Kind() != reflect.Slice {
return 0, fmt.Errorf("keys must be slice")
@ -107,7 +122,6 @@ func BatchUpdate(m *ebpf.Map, keys interface{}, values interface{}, opts *ebpf.B
}
}
return vKeys.Len(), nil
}
}
func AssignBpfObjects(to *bpfObjects, from interface{}) {