本文整理汇总了Golang中github.com/osrg/gobgp/table.Path.GetCommunities方法的典型用法代码示例。如果您正苦于以下问题:Golang Path.GetCommunities方法的具体用法?Golang Path.GetCommunities怎么用?Golang Path.GetCommunities使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/osrg/gobgp/table.Path
的用法示例。
在下文中一共展示了Path.GetCommunities方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: evaluate
// compare community in the message's attribute with
// the one in the condition.
func (c *CommunityCondition) evaluate(path *table.Path) bool {
communities := path.GetCommunities()
if len(communities) == 0 {
return false
}
makeStr := func(c uint32) string {
upper := strconv.FormatUint(uint64(c&0xFFFF0000>>16), 10)
lower := strconv.FormatUint(uint64(c&0x0000FFFF), 10)
return upper + ":" + lower
}
var strCommunities []string = nil
matched := false
idx := -1
for _, member := range c.CommunityList {
if member.isRegExp {
if strCommunities == nil {
// create community string.
strCommunities = make([]string, len(communities))
for i, c := range communities {
strCommunities[i] = makeStr(c)
}
}
for i, c := range strCommunities {
if member.communityRegExp.MatchString(c) {
matched = true
idx = i
log.WithFields(log.Fields{
"Topic": "Policy",
"RegExp": member.communityRegExp.String(),
}).Debug("community regexp used")
break
}
}
} else {
for i, c := range communities {
if c == member.community {
matched = true
idx = i
break
}
}
}
if matched {
log.WithFields(log.Fields{
"Topic": "Policy",
"Condition": "Community",
"Community": makeStr(communities[idx]),
}).Debug("condition matched")
return true
}
}
return false
}