func (path *Path) SetLargeCommunities(cs []*bgp.LargeCommunity, doReplace bool) { a := path.getPathAttr(bgp.BGP_ATTR_TYPE_LARGE_COMMUNITY) if a == nil || doReplace { path.setPathAttr(bgp.NewPathAttributeLargeCommunities(cs)) } else { l := a.(*bgp.PathAttributeLargeCommunities).Values path.setPathAttr(bgp.NewPathAttributeLargeCommunities(append(l, cs...))) } }
func extractLargeCommunity(args []string) ([]string, bgp.PathAttributeInterface, error) { for idx, arg := range args { if arg == "large-community" && len(args) > (idx+1) { elems := strings.Split(args[idx+1], ",") comms := make([]*bgp.LargeCommunity, 0, 1) for _, elem := range elems { c, err := bgp.ParseLargeCommunity(elem) if err != nil { return nil, nil, err } comms = append(comms, c) } args = append(args[:idx], args[idx+2:]...) return args, bgp.NewPathAttributeLargeCommunities(comms), nil } } return args, nil, nil }