| #!/bin/bash |
| # ------------------------------------------------------------------------------------------------- |
| # ONOS ACL tool. |
| # Usage: |
| # onos-acl node_ip [allow|deny|del] [--srcIp srcIp] [--dstIp dstIp] [--ipProto ipProto] [--dstTpPort dstTpPort] [--alcId aclId] |
| # onos-acl node_ip --json acl-config.json |
| # ------------------------------------------------------------------------------------------------- |
| |
| [ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1 |
| . $ONOS_ROOT/tools/build/envDefaults |
| . $ONOS_ROOT/tools/test/bin/find-node.sh |
| |
| fail="--fail" |
| [ "$1" == "-v" ] && shift && fail="" |
| |
| node=$(find_node $1) |
| |
| if [ "$2" == "--json" ]; then |
| shift |
| file=$2 |
| curl $fail -sSL --user $ONOS_WEB_USER:$ONOS_WEB_PASS \ |
| -X POST -H 'Content-Type:application/json' \ |
| http://$node:8181/onos/v1/acl/rules -d@$file |
| |
| else |
| policy="${2:deny}" |
| srcIp="" |
| dstIp="" |
| ipProto="" |
| dstTpPort="" |
| aclId="" |
| |
| while [ "$#" -gt 3 ]; do |
| if [ "$3" == "--srcIp" ]; then |
| shift && srcIp="$3" && shift |
| elif [ "$3" == "--dstIp" ]; then |
| shift && dstIp="$3" && shift |
| elif [ "$3" == "--ipProto" ]; then |
| shift && ipProto="$3" && shift |
| elif [ "$3" == "--dstTpPort" ]; then |
| shift && dstTpPort="$3" && shift |
| elif [ "$3" == "--aclId" ]; then |
| shift && aclId="$3" && shift |
| else |
| shift |
| fi |
| done |
| |
| if [ "$policy" == "del" ]; then |
| curl $fail -sSL --user $ONOS_WEB_USER:$ONOS_WEB_PASS \ |
| -X DELETE http://$node:8181/onos/v1/acl/rules/$aclId |
| |
| else |
| |
| aclRule="{\"action\": \"$policy\"" |
| [ "$srcIp" != "" ] && aclRule="$aclRule, \"srcIp\":\"$srcIp\"" |
| [ "$dstIp" != "" ] && aclRule="$aclRule, \"dstIp\":\"$dstIp\"" |
| [ "$ipProto" != "" ] && aclRule="$aclRule, \"ipProto\":\"$ipProto\"" |
| [ "$dstTpPort" != "" ] && aclRule="$aclRule, \"dstTpPort\":\"$dstTpPort\"" |
| aclRule="$aclRule}" |
| |
| curl $fail -sSL --user $ONOS_WEB_USER:$ONOS_WEB_PASS \ |
| -X POST -H 'Content-Type:application/json' \ |
| http://$node:8181/onos/v1/acl/rules -d "$aclRule" |
| fi |
| |
| fi |