MCPcopy
hub / github.com/osrg/gobgp / mod

Method mod

internal/pkg/table/policy.go:3560–3657  ·  view source on GitHub ↗
(op opType, rhs *Statement)

Source from the content-addressed store, hash-verified

3558)
3559
3560func (lhs *Statement) mod(op opType, rhs *Statement) error {
3561 cs := make([]Condition, len(lhs.Conditions))
3562 copy(cs, lhs.Conditions)
3563 ra := lhs.RouteAction
3564 as := make([]Action, len(lhs.ModActions))
3565 copy(as, lhs.ModActions)
3566 for _, x := range rhs.Conditions {
3567 var c Condition
3568 i := 0
3569 for idx, y := range lhs.Conditions {
3570 if x.Type() == y.Type() {
3571 c = y
3572 i = idx
3573 break
3574 }
3575 }
3576 switch op {
3577 case ADD:
3578 if c != nil {
3579 return fmt.Errorf("condition %d is already set", x.Type())
3580 }
3581 if cs == nil {
3582 cs = make([]Condition, 0, len(rhs.Conditions))
3583 }
3584 cs = append(cs, x)
3585 case REMOVE:
3586 if c == nil {
3587 return fmt.Errorf("condition %d is not set", x.Type())
3588 }
3589 cs = append(cs[:i], cs[i+1:]...)
3590 if len(cs) == 0 {
3591 cs = nil
3592 }
3593 case REPLACE:
3594 if c == nil {
3595 return fmt.Errorf("condition %d is not set", x.Type())
3596 }
3597 cs[i] = x
3598 }
3599 }
3600 if rhs.RouteAction != nil && !reflect.ValueOf(rhs.RouteAction).IsNil() {
3601 switch op {
3602 case ADD:
3603 if lhs.RouteAction != nil && !reflect.ValueOf(lhs.RouteAction).IsNil() {
3604 return fmt.Errorf("route action is already set")
3605 }
3606 ra = rhs.RouteAction
3607 case REMOVE:
3608 if lhs.RouteAction == nil || reflect.ValueOf(lhs.RouteAction).IsNil() {
3609 return fmt.Errorf("route action is not set")
3610 }
3611 ra = nil
3612 case REPLACE:
3613 if lhs.RouteAction == nil || reflect.ValueOf(lhs.RouteAction).IsNil() {
3614 return fmt.Errorf("route action is not set")
3615 }
3616 ra = rhs.RouteAction
3617 }

Callers 3

AddMethod · 0.95
RemoveMethod · 0.95
ReplaceMethod · 0.95

Calls 1

TypeMethod · 0.65

Tested by

no test coverage detected