Skip to content

Commit 415508d

Browse files
authored
Merge pull request #1351 from hzxuzhonghu/bpf-global
remove BpfLoader.KmeshConfig to prevent writing using it, should alwa…
2 parents 5804bdd + 5a0730b commit 415508d

File tree

1 file changed

+54
-60
lines changed

1 file changed

+54
-60
lines changed

pkg/bpf/bpf.go

Lines changed: 54 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ type BpfLoader struct {
5757

5858
obj *ads.BpfAds
5959
workloadObj *workload.BpfWorkload
60-
factory.KmeshBpfConfig
61-
versionMap *ebpf.Map
60+
versionMap *ebpf.Map
6261
}
6362

6463
func NewBpfLoader(config *options.BpfConfig) *BpfLoader {
@@ -89,15 +88,13 @@ func (l *BpfLoader) Start() error {
8988
if err = l.obj.Start(); err != nil {
9089
return err
9190
}
92-
l.KmeshBpfConfig = l.obj.GetBpfConfigVariable()
9391
} else if l.config.DualEngineEnabled() {
9492
if l.workloadObj, err = workload.NewBpfWorkload(l.config); err != nil {
9593
return err
9694
}
9795
if err = l.workloadObj.Start(); err != nil {
9896
return err
9997
}
100-
l.KmeshBpfConfig = l.workloadObj.GetBpfConfigVariable()
10198
// TODO: set bpf prog option in kernel native node
10299
l.setBpfProgOptions()
103100
}
@@ -294,22 +291,18 @@ func (l *BpfLoader) setBpfProgOptions() {
294291

295292
// Kmesh reboot updates only the nodeIP and pod sub gateway
296293
if restart.GetStartType() == restart.Normal {
297-
if err := l.NodeIP.Set(nodeIP); err != nil {
294+
if err := l.UpdateNodeIP(nodeIP); err != nil {
298295
log.Error("set NodeIP failed ", err)
299296
return
300297
}
301-
if err := l.PodGateway.Set(gateway); err != nil {
298+
if err := l.UpdatePodGateway(gateway); err != nil {
302299
log.Error("set PodGateway failed ", err)
303300
return
304301
}
305-
if err := l.AuthzOffload.Set(constants.ENABLED); err != nil {
302+
if err := l.UpdateAuthzOffload(constants.ENABLED); err != nil {
306303
log.Error("set AuthzOffload failed ", err)
307304
return
308305
}
309-
if err := l.EnableMonitoring.Set(constants.ENABLED); err != nil {
310-
log.Error("set EnableMonitoring failed ", err)
311-
return
312-
}
313306
}
314307
}
315308

@@ -382,25 +375,28 @@ func (l *BpfLoader) GetKmeshConfigMap() factory.GlobalBpfConfig {
382375
}
383376
}
384377

385-
func (l *BpfLoader) UpdateBpfLogLevel(BpfLogLevel uint32) error {
378+
func (l *BpfLoader) UpdateBpfLogLevel(bpfLogLevel uint32) error {
386379
if l.workloadObj != nil {
387-
if err := l.workloadObj.SockConn.BpfLogLevel.Set(BpfLogLevel); err != nil {
380+
if err := l.workloadObj.SockConn.BpfLogLevel.Set(bpfLogLevel); err != nil {
388381
return fmt.Errorf("set sockcon BpfLogLevel failed %w", err)
389382
}
390-
if err := l.workloadObj.SockOps.BpfLogLevel.Set(BpfLogLevel); err != nil {
383+
if err := l.workloadObj.SockOps.BpfLogLevel.Set(bpfLogLevel); err != nil {
391384
return fmt.Errorf("set sockops BpfLogLevel failed %w", err)
392385
}
393-
if err := l.workloadObj.XdpAuth.BpfLogLevel.Set(BpfLogLevel); err != nil {
386+
if err := l.workloadObj.XdpAuth.BpfLogLevel.Set(bpfLogLevel); err != nil {
394387
return fmt.Errorf("set xdp BpfLogLevel failed %w", err)
395388
}
396-
if err := l.workloadObj.SendMsg.BpfLogLevel.Set(BpfLogLevel); err != nil {
389+
if err := l.workloadObj.SendMsg.BpfLogLevel.Set(bpfLogLevel); err != nil {
397390
return fmt.Errorf("set sendmsg BpfLogLevel failed %w", err)
398391
}
392+
if err := l.workloadObj.CgroupSkb.BpfLogLevel.Set(bpfLogLevel); err != nil {
393+
return fmt.Errorf("set cgroup_skb BpfLogLevel failed %w", err)
394+
}
399395
} else if l.obj != nil {
400-
if err := l.obj.SockConn.BpfLogLevel.Set(BpfLogLevel); err != nil {
396+
if err := l.obj.SockConn.BpfLogLevel.Set(bpfLogLevel); err != nil {
401397
return fmt.Errorf("set sockcon BpfLogLevel failed %w", err)
402398
}
403-
if err := l.obj.SockOps.BpfLogLevel.Set(BpfLogLevel); err != nil {
399+
if err := l.obj.SockOps.BpfLogLevel.Set(bpfLogLevel); err != nil {
404400
return fmt.Errorf("set sockops BpfLogLevel failed %w", err)
405401
}
406402
}
@@ -409,65 +405,67 @@ func (l *BpfLoader) UpdateBpfLogLevel(BpfLogLevel uint32) error {
409405
}
410406

411407
func (l *BpfLoader) GetBpfLogLevel() uint32 {
412-
if l.BpfLogLevel != nil {
413-
var BpfLogLevel uint32
414-
if err := l.BpfLogLevel.Get(&BpfLogLevel); err != nil {
408+
var bpfLogLevel uint32
409+
if l.workloadObj != nil {
410+
if err := l.workloadObj.SockConn.BpfLogLevel.Get(&bpfLogLevel); err != nil {
411+
log.Errorf("get BpfLogLevel failed %v", err)
412+
}
413+
} else if l.obj != nil {
414+
if err := l.obj.SockConn.BpfLogLevel.Get(&bpfLogLevel); err != nil {
415415
log.Errorf("get BpfLogLevel failed %v", err)
416-
return 0
417416
}
418-
return BpfLogLevel
419417
}
420418

421-
return 0
419+
return bpfLogLevel
422420
}
423421

424-
func (l *BpfLoader) UpdateNodeIP(NodeIP [16]byte) error {
425-
if l.NodeIP != nil {
426-
if err := l.NodeIP.Set(NodeIP); err != nil {
422+
func (l *BpfLoader) UpdateNodeIP(nodeIP [16]byte) error {
423+
if l.workloadObj != nil {
424+
if err := l.workloadObj.SockOps.NodeIp.Set(nodeIP); err != nil {
427425
return fmt.Errorf("set NodeIP failed %w", err)
428426
}
427+
} else if l.obj != nil {
428+
return fmt.Errorf("unsupported nodeIP for kernel-native mode")
429429
}
430430

431431
return nil
432432
}
433433

434434
func (l *BpfLoader) GetNodeIP() [16]byte {
435-
if l.NodeIP != nil {
436-
var NodeIP [16]byte
437-
if err := l.NodeIP.Get(&NodeIP); err != nil {
435+
var nodeIP [16]byte
436+
if l.workloadObj != nil {
437+
if err := l.workloadObj.SockOps.NodeIp.Get(&nodeIP); err != nil {
438438
log.Errorf("get NodeIP failed %v", err)
439-
return [16]byte{}
440439
}
441-
return NodeIP
442440
}
443-
return [16]byte{}
441+
return nodeIP
444442
}
445443

446-
func (l *BpfLoader) UpdatePodGateway(PodGateway [16]byte) error {
447-
if l.PodGateway != nil {
448-
if err := l.PodGateway.Set(PodGateway); err != nil {
444+
func (l *BpfLoader) UpdatePodGateway(podGateway [16]byte) error {
445+
if l.workloadObj != nil {
446+
if err := l.workloadObj.SockOps.PodGateway.Set(podGateway); err != nil {
449447
return fmt.Errorf("set PodGateway failed %w", err)
450448
}
449+
} else if l.obj != nil {
450+
return fmt.Errorf("unsupported PodGateway for kernel-native mode")
451451
}
452452

453453
return nil
454454
}
455455

456456
func (l *BpfLoader) GetPodGateway() [16]byte {
457-
if l.PodGateway != nil {
458-
var PodGateway [16]byte
459-
if err := l.PodGateway.Get(&PodGateway); err != nil {
457+
var podGateway [16]byte
458+
if l.workloadObj != nil {
459+
if err := l.workloadObj.SockOps.PodGateway.Get(&podGateway); err != nil {
460460
log.Errorf("get PodGateway failed %v", err)
461-
return [16]byte{}
462461
}
463-
return PodGateway
464462
}
465-
return [16]byte{}
463+
return podGateway
466464
}
467465

468-
func (l *BpfLoader) UpdateAuthzOffload(AuthzOffload uint32) error {
469-
if l.AuthzOffload != nil {
470-
if err := l.AuthzOffload.Set(AuthzOffload); err != nil {
466+
func (l *BpfLoader) UpdateAuthzOffload(authzOffload uint32) error {
467+
if l.workloadObj != nil {
468+
if err := l.workloadObj.XdpAuth.AuthzOffload.Set(authzOffload); err != nil {
471469
return fmt.Errorf("set AuthzOffload failed %w", err)
472470
}
473471
}
@@ -476,23 +474,21 @@ func (l *BpfLoader) UpdateAuthzOffload(AuthzOffload uint32) error {
476474
}
477475

478476
func (l *BpfLoader) GetAuthzOffload() uint32 {
479-
if l.AuthzOffload != nil {
480-
var AuthzOffload uint32
481-
if err := l.AuthzOffload.Get(&AuthzOffload); err != nil {
477+
var authzOffload uint32
478+
if l.workloadObj != nil {
479+
if err := l.workloadObj.XdpAuth.AuthzOffload.Get(&authzOffload); err != nil {
482480
log.Errorf("get AuthzOffload failed %v", err)
483-
return 0
484481
}
485-
return AuthzOffload
486482
}
487-
return 0
483+
return authzOffload
488484
}
489485

490-
func (l *BpfLoader) UpdateEnableMonitoring(EnableMonitoring uint32) error {
486+
func (l *BpfLoader) UpdateEnableMonitoring(enableMonitoring uint32) error {
491487
if l.workloadObj != nil {
492-
if err := l.workloadObj.CgroupSkb.EnableMonitoring.Set(EnableMonitoring); err != nil {
488+
if err := l.workloadObj.CgroupSkb.EnableMonitoring.Set(enableMonitoring); err != nil {
493489
return fmt.Errorf("set CgroupSkb EnableMonitoring failed %w", err)
494490
}
495-
if err := l.workloadObj.SockOps.EnableMonitoring.Set(EnableMonitoring); err != nil {
491+
if err := l.workloadObj.SockOps.EnableMonitoring.Set(enableMonitoring); err != nil {
496492
return fmt.Errorf("set SockOps EnableMonitoring failed %w", err)
497493
}
498494
}
@@ -501,15 +497,13 @@ func (l *BpfLoader) UpdateEnableMonitoring(EnableMonitoring uint32) error {
501497
}
502498

503499
func (l *BpfLoader) GetEnableMonitoring() uint32 {
504-
if l.EnableMonitoring != nil {
505-
var EnableMonitoring uint32
506-
if err := l.EnableMonitoring.Get(&EnableMonitoring); err != nil {
500+
var enableMonitoring uint32
501+
if l.workloadObj != nil {
502+
if err := l.workloadObj.CgroupSkb.EnableMonitoring.Get(&enableMonitoring); err != nil {
507503
log.Errorf("get EnableMonitoring failed %v", err)
508-
return 0
509504
}
510-
return EnableMonitoring
511505
}
512-
return 0
506+
return enableMonitoring
513507
}
514508

515509
func (l *BpfLoader) UpdateEnablePeriodicReport(EnablePeriodicReport uint32) error {

0 commit comments

Comments
 (0)