使用Postman向ODL Nytrogen版REST API推送流失败求助
排查ODL Nitrogen推送MPLS流规则失败的问题
我来帮你一步步排查这个推送MPLS流规则到ODL Nitrogen版本失败的问题,下面是几个常见的排查方向和解决方案:
1. 检查RESTCONF URL路径是否正确
你当前的URL是针对单个指令资源的,但ODL的RESTCONF通常要求针对整个流资源进行PUT/POST操作,而不是单独更新某个指令。正确的路径应该直接指向流节点:
http://192.168.21.144:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/100
单独修改指令的路径在多数场景下不适用,尤其是创建新流的时候,需要把所有流属性(包括instructions)放在请求体中一次性提交。
2. 确认请求头和认证信息是否正确
ODL RESTCONF默认需要基础认证,且要求指定正确的内容类型:
- 必须携带
Authorization: Basic YWRtaW46YWRtaW4=(对应用户名admin,密码admin) - 必须设置
Content-Type: application/xml或application/yang-data+xml
如果缺少这些头,会返回401(未授权)或400(请求格式错误)。
3. 检查请求体XML的完整性和语法
你的请求体内容不完整(<order>3</order>...),流规则需要包含所有必填字段,且XML语法必须正确:
- 必须包含流ID(
<id>100</id>)、优先级(<priority>xxx</priority>)、匹配规则(即使是空匹配也要有<match/>) - 指令部分需要完整的动作定义,比如推送MPLS标签的动作需要包含
<apply-actions>、<push-mpls-action>和对应的参数(如以太网类型、标签值等) - 确保所有XML标签闭合,命名空间正确(根节点
flow的命名空间urn:opendaylight:flow:inventory不能缺失)
这里给你一个完整的MPLS推送流规则示例:
<?xml version="1.0" encoding="UTF-8"?> <flow xmlns="urn:opendaylight:flow:inventory"> <flow-name>push-mpls-action</flow-name> <id>100</id> <priority>1000</priority> <match/> <instructions> <instruction> <order>3</order> <apply-actions> <action> <order>0</order> <push-mpls-action xmlns="urn:opendaylight:action:output"> <ethernet-type>0x8847</ethernet-type> </push-mpls-action> </action> <action> <order>1</order> <set-field> <mpls-label> <label>100</label> <traffic-class>0</traffic-class> <bos>1</bos> <ttl>255</ttl> </mpls-label> </set-field> </action> </apply-actions> </instruction> </instructions> <hard-timeout>0</hard-timeout> <idle-timeout>0</idle-timeout> <table_id>0</table_id> </flow>
4. 查看ODL日志定位具体错误
ODL的Karaf日志会详细记录RESTCONF请求的错误原因,登录到ODL服务器,查看karaf/logs/karaf.log文件:
- 如果是XML解析错误,会看到类似
SAXParseException的日志 - 如果是流规则冲突(比如流ID重复、优先级问题),会有对应的规则校验失败信息
- 如果是路径不存在,会返回404并在日志中提示资源未找到
5. 用curl命令测试排除工具问题
用curl发送请求可以明确看到响应状态码和错误信息,避免工具本身的问题:
curl -u admin:admin -X PUT -H "Content-Type: application/xml" -d @flow.xml http://192.168.21.144:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/100
把完整的XML内容保存到flow.xml文件中,执行命令后根据返回的状态码排查:
- 400:请求体格式错误或必填字段缺失
- 401:认证失败(用户名密码错误或未携带认证头)
- 404:URL路径错误(比如节点ID
openflow:1不存在,或表ID错误) - 500:ODL内部错误(可能是yang模型加载问题或插件故障)
内容的提问来源于stack exchange,提问作者Juan Andrés Martinez
相关产品推荐
相关产品推荐

