我正在使用以下代码从连接到大型ISP网络(指数以万计的路由器)的路由器中丢弃不支持的物理接口/子接口:
private final static Pattern INTERFACES_TO_FILTER =
Pattern.compile("unrouted VLAN|GigabitEthernet.+-mpls layer|FastEthernet.+-802\\.1Q vLAN subif");
// Simplification
List<String> interfaces;
// lots of irrelevant code to query the routers
for (String intf : interfaces) {
if (INTERFACES_TO_FILTER.matcher(intf).find()) {
// code to prevent the interface from being used
}
}
这个想法是丢弃以下条目:
- 未路由的VLAN 2000,用于GigabitEthernet2/11.2000
- GigabitEthernet1/2-mpls层
- FastEthernet6/0/3.2000-802.1Q vLAN子接口
这段代码在大量接口(一些路由器有50k+子接口)上经常被触发(每分钟几次),缓存也没有太多帮助,因为新的子接口经常被配置/丢弃。计划优化正则表达式,以便该过程完成得更快(每纳秒都很重要)。你们能给我指点吗?
注意:mpls层
和802.1Q
适用于其他类型的接口,但不适用于未路由的VLAN
。
matches()
也能起作用,因为它不会在每个位置都尝试(只尝试一次匹配而不是intf.length()
)。 - ratchet freak