fix: incorrectly throw error when 5.2<=kernel<5.5

This commit is contained in:
mzz2017
2023-02-01 01:34:50 +08:00
parent 9cdee19b57
commit db50c80a96
4 changed files with 65 additions and 13 deletions

View File

@ -95,3 +95,37 @@ func BatchUpdate(m *ebpf.Map, keys interface{}, values interface{}, opts *ebpf.B
return vKeys.Len(), nil
}
}
type bpfObjectsLan struct {
// NOTICE: Consider to update me if any program added.
TproxyEgress *ebpf.Program `ebpf:"tproxy_egress"`
TproxyIngress *ebpf.Program `ebpf:"tproxy_ingress"`
bpfMaps
}
func AssignBpfPrograms(to *bpfObjects, from interface{}) {
vTo := reflect.Indirect(reflect.ValueOf(to))
vFrom := reflect.Indirect(reflect.ValueOf(from))
tFrom := vFrom.Type()
// programs
for i := 0; i < vFrom.NumField(); i++ {
fieldFrom := vFrom.Field(i)
structFieldFrom := tFrom.Field(i)
if structFieldFrom.Type != reflect.TypeOf(&ebpf.Program{}) {
continue
}
fieldTo := vTo.FieldByName(structFieldFrom.Name)
fieldTo.Set(fieldFrom)
}
// bpfMaps
vFrom = vFrom.FieldByName("bpfMaps")
tFrom = vFrom.Type()
for i := 0; i < vFrom.NumField(); i++ {
fieldFrom := vFrom.Field(i)
structFieldFrom := tFrom.Field(i)
fieldTo := vTo.FieldByName(structFieldFrom.Name)
fieldTo.Set(fieldFrom)
}
}