#!/bin/sh
#
# $Id: aggregate-ios,v 1.3 2001/02/16 04:48:10 jabley Exp $
# 
# Copyright (c) 2000-2001 by Metromedia Fiber Network Services, Inc.
# 
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# 
# THE SOFTWARE IS PROVIDED "AS IS" AND METROMEDIA FIBER NETWORK SERVICES,
# INC. ("MFN") DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
# EVENT SHALL MFN BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
# 
#   Metromedia Fiber Network
#   360 Hamilton Avenue
#   White Plains, NY 10601
# 
#   http://www.mmfn.com/
#
# aggregate-ios:
#
#   receive some prefix lists in ios syntax on stdin, feed
#   them through aggregate(1), then return the results in
#   ios syntax on stdout
#
# jabley@mfnx.net

prefix=${TMPDIR:-/tmp}/aggregate-ios.$$.

awk -v prefix=${prefix} \
  '/^ip prefix-list [A-Za-z0-9]+ permit / { print $5 > prefix $3; } \
   /^ip prefix-list [A-Za-z0-9]+ seq [0-9]+ permit / { print $7 > prefix $3; }'

for name in ${prefix}*; do
  list=$(echo ${name} | tr -d ${prefix})
  aggregate <${name} | awk -v name=${name} -v prefix=${prefix} \
    'BEGIN { list = name; sub("^" prefix, "", list); } \
       { split($0, a, /\//); printf "ip prefix-list %s permit %s%s\n", \
       list, $0, (a[2] < 24 ? " le 24" : ""); }'
  rm -f ${name}
done

