From owner-svn-src-head@FreeBSD.ORG Mon Jun 2 18:02:10 2014 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id D86F97D2; Mon, 2 Jun 2014 18:02:10 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C40E7232E; Mon, 2 Jun 2014 18:02:10 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s52I2AuI044074; Mon, 2 Jun 2014 18:02:10 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s52I2AFZ044073; Mon, 2 Jun 2014 18:02:10 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201406021802.s52I2AFZ044073@svn.freebsd.org> From: Marcel Moolenaar Date: Mon, 2 Jun 2014 18:02:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r266975 - head/tools/ifnet X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jun 2014 18:02:10 -0000 Author: marcel Date: Mon Jun 2 18:02:10 2014 New Revision: 266975 URL: http://svnweb.freebsd.org/changeset/base/266975 Log: Add convert_drvapi.sh; a script that helps to convert NIC drivers to use the procedural interface. Submitted by: Sreekanth Rupavatharam Reviewed by: glebius@ Obtained from: Juniper Networks, Inc. Added: head/tools/ifnet/ head/tools/ifnet/convert_drvapi.sh (contents, props changed) Added: head/tools/ifnet/convert_drvapi.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/ifnet/convert_drvapi.sh Mon Jun 2 18:02:10 2014 (r266975) @@ -0,0 +1,255 @@ +#!/bin/sh +# +# Copyright (c) 2014 Juniper Networks, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# $FreeBSD$ +# + +# +# Convert a NIC driver to use the procdural API. +# It doesn't take care of all the # cases yet, +# but still does about 95% of work. +# +# Author: Sreekanth Rupavatharam +# + +if [ $# -lt 1 ] +then + echo " $0 "; + exit 1; +fi + +# XXX - This needs to change if the data structure uses different name +__ifp__="ifp"; + +file=$1 + +rotateCursor() { + case $toggle + in + 1) + printf " \\ " + printf "\b\b" + toggle="2" + ;; + + 2) + printf " | " + printf "\b\b\b" + toggle="3" + ;; + + 3) + printf " / " + printf "\b\b\b" + toggle="4" + ;; + + *) + printf " - " + printf "\b\b\b" + toggle="1" + ;; + esac +} + +handle_set() { +# Handle the case where $__ifp__->if_blah = XX; + line=$1 + set=`echo $line| grep "$__ifp__->.* = "` + if [ ! -z "$set" ] + then + word=`echo $line | awk -F "if_" ' { print $2 }' | awk -F" =" '{ print $1 }'` + value=`echo $line | awk -F "=" '{ print $2 }' | sed -e 's/;//g'` + new=`echo if_set$word"\($__ifp__,"$value");"` + new=`echo $new | sed -e 's/&/\\\&/'` + old=`echo $line|sed -e 's/^[ ]*//'` + line=`echo $line| sed -e's/'$old'/'$new'/g'` + return 0 + fi + return 1 +} + +handle_inc() { + line=$1 + inc=`echo $line | grep "$__ifp__->.*++"` + if [ ! -z "$inc" ] + then + word=`echo $line | awk -F"if_" '{ print $2 }'|awk -F"\+" '{ print $1}'` + value=' 1'; + old=`echo $line|sed -e 's/^[ ]*//'` + new=`echo if_inc$word"\($__ifp__,"$value");"` + new=`echo $new | sed -e 's/&/\\\&/'` + line=`echo $line| sed -e's/'$old'/'$new'/g'` + return 0; + fi + return 1; +} + +handle_add() { + line=$1 + add=`echo $line|grep "$__ifp__->.*+= "` + if [ ! -z "$add" ] + then + word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'` + value=`echo $line | awk -F"=" '{ print $2}' | sed -e 's/;//g'` + new=`echo if_inc$word"\($__ifp__,$value);"` + new=`echo $new | sed -e 's/&/\\\&/'` + old=`echo $line|sed -e 's/^[ ]*//'` + line=`echo $line| sed -e's/'$old'/'$new'/g'` + return 0 + fi + return 1; + +} + +handle_or() { + line=$1 + or=`echo $line|grep "$__ifp__->.*|= "` + if [ ! -z "$or" ] + then + word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'` + value=`echo $line | awk -F"=" '{ print $2}' | sed -e 's/;//g'` + new=`echo if_set${word}bit"($__ifp__,$value, 0);"` + new=`echo $new | sed -e 's/&/\\\&/'` + #line=`echo $line|sed -e 's/&/\\&/'` + old=`echo $line|sed -e 's/^[ ]*//'` + line=`echo $line| sed -e's/'$old'/'$new'/g'` + return 0; + fi + return 1; + +} + +handle_and() { + line=$1 + or=`echo $line|grep "$__ifp__->.*&= "` + if [ ! -z "$or" ] + then + word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'` + value=`echo $line | awk -F"=" '{ print $2}' | sed -e 's/;//g'` + value=`echo $value | sed -e's/~//g'` + new=`echo if_set${word}bit"\($__ifp__, 0,$value);"` + new=`echo $new | sed -e 's/&/\\\&/'` + old=`echo $line|sed -e 's/^[ ]*//'` + line=`echo $line| sed -e's/'$old'/'$new'/g'` + return 0; + fi + return 1; + +} + +# XXX - this needs updating +handle_misc() { + line=$1 + get=`echo $line | grep "if_capabilities\|if_flags\|if_softc\|if_capenable\|if_mtu\|if_drv_flags"` + if [ ! -z "$get" ] + then + word=`echo $line |awk -F"$__ifp__->if_" '{ print $2 }' | \ + sed -e's/[^a-zA-Z0-9_]/\@/'|awk -F"\@" '{ print $1}'` + old=`echo "$__ifp__->if_"${word}` + new=`echo "if_get"${word}"($__ifp__)"` + new=`echo $new | sed -e 's/&/\\\&/'` + line=`echo $line| sed -e's/'$old'/'$new'/g'` + return 0; + fi + return 1; + +} + +if [ -e $file.tmp ] +then + rm $file.tmp +fi +IFS= +echo -n "Conversion for $file started, please wait: " +FAIL_PAT="XXX - DRVAPI" +count=0 +cat $1 | while read -r line +do +count=`expr $count + 1` +rotateCursor +pat=`echo $line | grep "$__ifp__->"` +while [ "$pat" != "" ] +do + pat=`echo $line | grep "$__ifp__->"` + if [ ! -z `echo $pat | grep "$FAIL_PAT"` ] + then + break; + fi + + handle_set $line + + if [ $? != 0 ] + then + handle_inc $line + fi + + if [ $? != 0 ] + then + handle_add $line + fi + + if [ $? != 0 ] + then + handle_or $line + fi + + if [ $? != 0 ] + then + handle_and $line + fi + + if [ $? != 0 ] + + then + handle_misc $line + fi + + if [ $? != 0 ] + then + if [ ! -z `echo $line | grep "$__ifp__->"` ] + then + line=`echo $line | sed -e 's:$: \/* '${FAIL_PAT}' *\/:g'` + fi + fi +done + # Replace the ifnet * with if_t + if [ ! -z `echo $line | grep "struct ifnet"` ] + then + line=`echo $line | sed -e 's/struct ifnet[ \t]*\*/if_t /g'` + fi + echo "$line" >> $file.tmp +done +echo "" +count=`grep $FAIL_PAT $file.tmp | wc -l` +if [ $count -gt 0 ] +then + echo "$count lines could not be converted to DRVAPI" + echo "Look for /* $FAIL_PAT */ in the converted file" +fi +echo "original $file has been moved to $file.orig" +mv $file $file.orig +mv $file.tmp $file