如何在不使用Agent的情况下通过Groovy代码删除UnetStack路由
不依赖自定义Agent通过Groovy代码实现UnetStack路由删除
UnetStack shell中能直接执行的路由删除操作,本质是调用内置Router服务的公开API,不需要编写、部署自定义Agent,直接在Groovy代码中获取Router服务引用调用对应方法即可实现完全一致的效果。
核心逻辑
所有路由操作都围绕内置的Router服务展开,Groovy代码运行在UnetStack的脚本执行上下文时,可以直接通过服务发现接口拿到Router实例,不需要额外封装Agent逻辑。
常用路由删除方法
拿到Router实例后,可根据需求调用对应删除接口:
- 删除指定目标节点的所有路由:调用
deleteRoutes(int targetAddress),传入目标节点地址,返回值为成功删除的路由条目数 - 删除指定下一跳节点的所有路由:调用
deleteRoutesToNextHop(int nextHopAddress),传入下一跳节点地址,返回值为成功删除的路由条目数 - 清空节点全量路由表:调用
flush()方法,无返回值,执行后路由表所有条目都会被清除
可直接复用的Groovy代码
// 导入路由服务常量 import org.arl.unet.Services // 拉取Router服务实例,无需自定义Agent def router = agentForService(Services.ROUTING) if (!router) { println "路由服务未加载,无法执行删除操作" return } // 场景1:删除指向目标节点21的所有路由 def target = 21 def cnt1 = router.deleteRoutes(target) println "已删除指向节点${target}的路由${cnt1}条" // 场景2:删除所有下一跳为节点7的路由 def nextHop = 7 def cnt2 = router.deleteRoutesToNextHop(nextHop) println "已删除下一跳为节点${nextHop}的路由${cnt2}条" // 场景3:清空整张路由表(生产环境谨慎执行) // router.flush() // println "路由表已全部清空"
说明:上述代码的执行权限、生效效果和UnetStack shell中直接输入路由删除命令完全一致。如果节点运行了动态路由协议(如RPL、OLSR、AODV等),手动删除的路由会被协议按照网络拓扑自动重新学习生成。
内容的提问来源于stack exchange,提问作者satish vanapalli
相关产品推荐
相关产品推荐

