Last active
October 9, 2019 10:48
-
-
Save netravnen/16667887f2dac11d74b7866c610b40fe to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# FILENAME: /usr/local/sbin/roa-export | |
# | |
# | |
# PARAMS | |
# | |
WORK_DIR=/tmp | |
ROA_DIR=/var/local/roa | |
ROA_OUTFILE_CSV=${ROA_DIR}/routinator.csv.out | |
ROUTINATOR_DOCKER_HOST_ID=c9517bf2b616 | |
ROUTINATOR_CMD_PROC=routinator | |
ROUTINATOR_CMD_ARGS='vrps --format csv' | |
ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") | |
FILENAME=/usr/local/sbin/roa-export | |
uname2=$(ls -l $1 | awk '{print $3}') | |
# | |
# PRE-CHECK | |
# | |
if [ ! -d ${ROA_DIR} ] ; then mkdir -p ${ROA_DIR} ; fi | |
if [ ! -d ${ROA_DIR}/.git ] ; then | |
git -C ${ROA_DIR}/ init | |
git -C ${ROA_DIR}/ config user.name "roagen" | |
git -C ${ROA_DIR}/ config user.email "script@localhost" | |
git -C ${ROA_DIR}/ commit --allow-empty -m "Initial commit" | |
if [ ! -f ${ROA_DIR}/README.md ] ; then | |
touch ${ROA_DIR}/README.md | |
echo '## ROA EXPORT' | tee ${ROA_DIR}/README.md | |
git -C ${ROA_DIR}/ add README.md | |
fi | |
git -C ${ROA_DIR}/ commit README.md -m "Add README.md" | |
fi | |
if [ ! -f /etc/cron.hourly/roa-export ] ; then | |
ln -s ${FILENAME} /etc/cron.hourly/roa-export | |
fi | |
if [ ! -x ${FILENAME} ] ; then | |
chmod u+x ${FILENAME} | |
fi | |
if [ "$uname2" == "$USER" ] ; then | |
chown root ${FILENAME} | |
fi | |
# | |
# DUMP CSV OUTPUT FROM ROUTINATOR | |
# | |
docker exec -it ${ROUTINATOR_DOCKER_HOST_ID} ${ROUTINATOR_CMD_PROC} ${ROUTINATOR_CMD_ARGS} | sort -Vu > ${ROA_OUTFILE_CSV} | |
# | |
# REFORMAT THE WHOLE THING TO BIRD16 AND BIRD2 COMPLIANT FORMAT | |
# | |
for PROTO in 6 4 ; do | |
if [ $PROTO == "6" ] ; then | |
OUTFILE_BIRD16=${ROA_DIR}/${ROUTINATOR_CMD_PROC}.bird16_v6.out | |
OUTFILE_BIRD2=${ROA_DIR}/${ROUTINATOR_CMD_PROC}.bird2_v6.out | |
GREP_REGEX='^AS[0-9]+,[0-9a-f\:]+\/(19|[2-9][0-9]|1[01][0-9]|[12[0-8]),(19|[2-9][0-9]|1[01][0-9]|[12[0-8])' | |
else | |
OUTFILE_BIRD16=${ROA_DIR}/${ROUTINATOR_CMD_PROC}.bird16_v4.out | |
OUTFILE_BIRD2=${ROA_DIR}/${ROUTINATOR_CMD_PROC}.bird2_v4.out | |
GREP_REGEX='^AS[0-9]+,[0-9\.]+\/([8-9]|[12][0-9]|3[0-2]),([8-9]|[12][0-9]|3[0-2])' | |
fi | |
egrep "${GREP_REGEX}" ${ROA_OUTFILE_CSV} | | |
sed 's/^AS//' | | |
awk -F "," '{ printf "roa %s max %s as %s;\t# source %s\n",$2,$3,$1,toupper($4) }' | sort -Vu > ${OUTFILE_BIRD16} | |
egrep "${GREP_REGEX}" ${ROA_OUTFILE_CSV} | | |
sed 's/^AS//' | | |
awk -F "," '{ printf "route %s max %s as %s;\t# source %s\n",$2,$3,$1,toupper($4) }' | sort -Vu > ${OUTFILE_BIRD2} | |
if [ $PROTO == "6" ] ; then | |
COUNT_ROA_6=$(cat ${OUTFILE_BIRD16} | grep -v '^#' | grep -v '^$' | grep ^ro | wc -l) | |
else | |
COUNT_ROA_4=$(cat ${OUTFILE_BIRD16} | grep -v '^#' | grep -v '^$' | grep ^ro | wc -l) | |
fi | |
done | |
# | |
# COMMIT OUTPUT FILES TO LOCAL GIT REPOSITORY | |
# | |
# Commit latest version of ROA files | |
git -C ${ROA_DIR}/ add *.bird*_v*.out | |
git -C ${ROA_DIR}/ commit -m "Updated ROA files - $ISO_DATE" --quiet | |
# Push ROA repository to every remote configured | |
for REMOTE in $(git -C ${ROA_DIR}/ remote | egrep -v upstream | paste -sd " " -) ; do git -C ${ROA_DIR}/ push $REMOTE master:master --quiet ; done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment