| 2606 | } |
| 2607 | |
| 2608 | func (b *IPRouteBody) safi(logger *slog.Logger, version uint8, software Software) Safi { |
| 2609 | // frr 7.2 and later versions have safiUnspec, older versions don't have safiUnspec |
| 2610 | if b.Safi == safiUnspec && (version < 6 || |
| 2611 | version == 6 && software.name == "frr" && software.version < 7.2) { |
| 2612 | return SafiUnicast // safiUnspec is regarded as safiUnicast in older versions |
| 2613 | } |
| 2614 | if b.Safi <= safiMulticast || version > 4 { // not need to convert |
| 2615 | return b.Safi |
| 2616 | } |
| 2617 | safiMap := zapi4SafiMap |
| 2618 | if version < 4 { |
| 2619 | safiMap = zapi3SafiMap |
| 2620 | } |
| 2621 | safi, ok := safiMap[b.Safi] |
| 2622 | if !ok { |
| 2623 | safi = safiUnspec // failed to convert |
| 2624 | } |
| 2625 | logger.Debug("zebra converts safi", |
| 2626 | slog.String("Topic", "Zebra"), |
| 2627 | slog.Any("Body", b), |
| 2628 | slog.String("Old", b.Safi.String()), |
| 2629 | slog.String("New", safi.String()), |
| 2630 | ) |
| 2631 | return safi // success to convert |
| 2632 | } |
| 2633 | |
| 2634 | // Family is referred in zclient |
| 2635 | func (b *IPRouteBody) Family(logger *slog.Logger, version uint8, software Software) bgp.Family { |