Skip to content

Commit

Permalink
Re-commit PR #432 (SHA 4546372) (#474)
Browse files Browse the repository at this point in the history
* [config/acl] Get ACL config from DHCP and load it in swss container (#432)
* Temporarily disable DHCP option 226
  • Loading branch information
taoyl-ms authored Apr 3, 2017
1 parent a0c80d8 commit 8c76556
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 2 deletions.
13 changes: 13 additions & 0 deletions dockers/docker-orchagent/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,18 @@ function start_app {
done
}

function config_acl {
if [ -f "/etc/sonic/acl.json" ]; then
mkdir -p /etc/swss/config.d/acl
rm -rf /etc/swss/config.d/acl/*
translate_acl -m /etc/sonic/minigraph.xml -o /etc/swss/config.d/acl /etc/sonic/acl.json
for filename in /etc/swss/config.d/acl/*.json; do
[ -e "$filename" ] || break
swssconfig $filename
done
fi
}

function clean_up {
pkill -9 orchagent
pkill -9 portsyncd
Expand Down Expand Up @@ -61,6 +73,7 @@ while true; do
result=`echo -en "SELECT 1\nHLEN HIDDEN" | redis-cli | sed -n 2p`
if [ "$result" != "0" ]; then
start_app
config_acl
read
fi
sleep 1
Expand Down
1 change: 1 addition & 0 deletions files/dhcp/dhclient.conf
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
option snmp-community code 224 = text;
option minigraph-url code 225 = text;
option acl-url code 226 = text;

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
Expand Down
3 changes: 3 additions & 0 deletions files/dhcp/graphserviceurl
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,8 @@ case $reason in
else
echo "N/A" > /tmp/dhcp_graph_url
fi
if [ -n "$new_acl_url" ]; then
echo $new_acl_url > /tmp/dhcp_acl_url
fi
;;
esac
30 changes: 30 additions & 0 deletions files/image_config/updategraph/updategraph
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ if [ "$enabled" != "true" ]; then
exit 0
fi

ACL_URL=$acl_src

if [ "$src" = "dhcp" ]; then
while [ ! -f /tmp/dhcp_graph_url ]; do
echo "Waiting for DHCP response..."
Expand All @@ -38,6 +40,18 @@ if [ "$src" = "dhcp" ]; then
sed -i "/src=/d" /etc/sonic/updategraph.conf
echo "src=\"$GRAPH_URL\"" >> /etc/sonic/updategraph.conf
fi

if [ -f /tmp/dhcp_acl_url ]; then
ACL_URL=`sonic-cfggen -t /tmp/dhcp_acl_url -a "{\"hostname\": \"$HOSTNAME\"}"`
if [[ ! $ACL_URL =~ $URL_REGEX ]]; then
echo "\"$ACL_URL\" is not a valid url. Skipping acl update."
ACL_URL=""
fi
if [ "$dhcp_as_static" = "true" ]; then
sed -i "/acl_src=/d" /etc/sonic/updategraph.conf
echo "acl_src=\"$ACL_URL\"" >> /etc/sonic/updategraph.conf
fi
fi
else
GRAPH_URL=$src
fi
Expand All @@ -53,3 +67,19 @@ while true; do
curl -f $GRAPH_URL -o /etc/sonic/minigraph.xml --connect-timeout 15 && break
sleep 5
done

if [ -n "$ACL_URL" ]; then
if [ -f /etc/sonic/acl.json ]; then
echo "Renaming acl.json to acl.json.old"
mv /etc/sonic/acl.json /etc/sonic/acl.json.old
fi
echo "Getting ACL config from $ACL_URL"

while true; do
curl -f $ACL_URL -o /etc/sonic/acl.json --connect-timeout 15 && break
sleep 5
done
else
echo "Skip ACL config download."
fi

4 changes: 2 additions & 2 deletions src/sonic-config-engine/translate_acl
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ def translate_acl_fixed_port(filename, output_path, port, max_priority):

def translate_acl(filename, output_path, attach_to, max_priority):
yang_acl = pybindJSON.load(filename, openconfig_acl, "openconfig_acl")
print attach_to.keys()
for aclsetname in yang_acl.acl.acl_sets.acl_set:
tablename = aclsetname.replace(" ", "_").replace("-", "_")
if attach_to.has_key(tablename):
Expand All @@ -151,7 +150,8 @@ def main():
translate_acl_fixed_port(args.input, args.output_path, args.port, args.max_priority)
elif args.minigraph:
mini_data = parse_xml(args.minigraph)
translate_acl(args.input, args.output_path, mini_data['minigraph_acls'], args.max_priority)
if mini_data['minigraph_acls']:
translate_acl(args.input, args.output_path, mini_data['minigraph_acls'], args.max_priority)

if __name__ == "__main__":
main()

0 comments on commit 8c76556

Please sign in to comment.