# 社区属性转换与本地优先级修正函数(Local Pref 200封顶版) function function_inet_community_make(){ # 1. 从上游收到的路由 => 赋予兜底优先级 (Local Pref = 100) if bgp_large_community ~ [(LOCAL_ASN, 10100, 0)] then { bgp_local_pref = 100; bgp_large_community.add((LOCAL_ASN, 2, 4)); bgp_large_community.delete((LOCAL_ASN, 10100, 0)); return true; } # 2. 私有上游 => 赋予兜底优先级 (Local Pref = 100) if bgp_large_community ~ [(LOCAL_ASN, 10100, 1)] then { bgp_local_pref = 100; bgp_large_community.delete((LOCAL_ASN, 10100, 1)); return true; } # 3. Peer/IXP 收到的路由 => 赋予中等优先 (Local Pref = 140) if bgp_large_community ~ [(LOCAL_ASN, 10100, 2), (LOCAL_ASN, 10100, 3)] then { bgp_local_pref = 140; bgp_large_community.add((LOCAL_ASN, 2, 4)); bgp_large_community.delete([(LOCAL_ASN, 10100, 2), (LOCAL_ASN, 10100, 3)]); return true; } # 4. 下游客户发来的路由 => 赋予高优先级 (Local Pref = 180) if bgp_large_community ~ [(LOCAL_ASN, 10100, 4)] then { bgp_local_pref = 180; bgp_large_community.add([ (LOCAL_ASN, 2, 1), (LOCAL_ASN, 2, 2), (LOCAL_ASN, 2, 3), (LOCAL_ASN, 2, 4) ]); bgp_large_community.delete((LOCAL_ASN, 10100, 4)); return true; } # 5. 自身宣告的前缀 => 赋予最高级封顶 (Local Pref = 200) if bgp_large_community ~ [(LOCAL_ASN, 200, 0)] then { bgp_local_pref = 200; bgp_large_community.add([(LOCAL_ASN, 2, 0..4)]); bgp_large_community.delete((LOCAL_ASN, 200, 0)); return true; } return false; } # 社区安全检查/清理(全量通配版) function function_inet_bgp_community_clear(){ # 使用 [ (ASN, Data1, *) ] 语法,直接清空该分类下的所有子标记 bgp_large_community.delete([ (LOCAL_ASN, 1, *), (LOCAL_ASN, 2, *), (LOCAL_ASN, 3, *), (LOCAL_ASN, 200, *), (LOCAL_ASN, 10100, *), (LOCAL_ASN, 10101, *), (LOCAL_ASN, 10102, *) ]); }