#!/bin/sh

# Prefix network structure/defines/functions with "rte_".

set -e


if [ $# = 0 ]; then
	echo 'usage: $0 <*.[ch] files>'
	exit 1
fi

files="$@"

# $1: pattern
# $2: replacement
replace()
{
	local pattern="$1"
	local replace="$2"

	sed -i -e "s,${pattern},${replace},g" ${files}
}

# $*: function names
replace_function()
{
	for i in $*; do
		replace "\<$i\>(" "rte_$i("
	done
}

# $*: define names
replace_define()
{
	for i in $*; do
		local pattern
		case "$i" in
			*'(')
				pattern="\<${i%(}\>("
				;;
			*)
				pattern="\<${i}\>"
				;;
		esac
		replace "$pattern" "RTE_$i"
	done
}

# $*: struct names
replace_struct()
{
	for i in $*; do
		replace "struct\([ 	][ 	]*\)\<$i\>" "struct\1rte_$i"
	done
}

replace arp_hrd arp_hardware
replace arp_pro arp_protocol
replace arp_hln arp_hlen
replace arp_pln arp_plen
replace arp_op arp_opcode
replace_struct arp_hdr arp_ipv4
replace_define ARP_HRD_ETHER ARP_OP_REQUEST ARP_OP_REPLY ARP_OP_REVREQUEST \
	       ARP_OP_REVREPLY ARP_OP_INVREQUEST ARP_OP_INVREPLY
replace_struct ether_addr ether_hdr vlan_hdr vxlan_hdr vxlan_gpe_hdr
replace_function is_same_ether_addr is_zero_ether_addr is_unicast_ether_addr \
		 is_multicast_ether_addr is_broadcast_ether_addr \
		 is_universal_ether_addr is_local_admin_ether_addr \
		 is_valid_assigned_ether_addr eth_random_addr ether_addr_copy \
		 ether_format_addr
replace_define ETHER_ADDR_LEN ETHER_TYPE_LEN ETHER_CRC_LEN ETHER_HDR_LEN \
	       ETHER_MIN_LEN ETHER_MAX_LEN ETHER_MTU ETHER_MAX_VLAN_FRAME_LEN \
	       ETHER_MAX_VLAN_ID ETHER_MAX_JUMBO_FRAME_LEN ETHER_MIN_MTU \
	       ETHER_LOCAL_ADMIN_ADDR ETHER_GROUP_ADDR ETHER_TYPE_IPv4 \
	       ETHER_TYPE_IPv6 ETHER_TYPE_ARP ETHER_TYPE_VLAN ETHER_TYPE_RARP \
	       ETHER_TYPE_QINQ ETHER_TYPE_ETAG ETHER_TYPE_1588 ETHER_TYPE_SLOW \
	       ETHER_TYPE_TEB ETHER_TYPE_LLDP ETHER_TYPE_MPLS ETHER_TYPE_MPLSM \
	       ETHER_VXLAN_HLEN ETHER_ADDR_FMT_SIZE VXLAN_GPE_TYPE_IPV4 \
	       VXLAN_GPE_TYPE_IPV6 VXLAN_GPE_TYPE_ETH VXLAN_GPE_TYPE_NSH \
	       VXLAN_GPE_TYPE_MPLS VXLAN_GPE_TYPE_GBP VXLAN_GPE_TYPE_VBNG \
	       ETHER_VXLAN_GPE_HLEN
replace_struct esp_hdr
replace_struct gre_hdr
replace_struct icmp_hdr
replace_define IP_ICMP_ECHO_REPLY IP_ICMP_ECHO_REQUEST
replace_struct ipv4_hdr ipv6_hdr
replace_define "IPv4(" IPV4_MAX_PKT_LEN IPV4_HDR_IHL_MASK IPV4_IHL_MULTIPLIER \
	       IPV4_HDR_DF_SHIFT IPV4_HDR_MF_SHIFT IPV4_HDR_FO_SHIFT \
	       IPV4_HDR_DF_FLAG IPV4_HDR_MF_FLAG IPV4_HDR_OFFSET_MASK \
	       IPV4_HDR_OFFSET_UNITS IPV4_ANY IPV4_LOOPBACK IPV4_BROADCAST \
	       IPV4_ALLHOSTS_GROUP IPV4_ALLRTRS_GROUP IPV4_MAX_LOCAL_GROUP \
	       IPV4_MIN_MCAST IPV4_MAX_MCAST IS_IPV4_MCAST IPV6_HDR_FL_SHIFT \
	       IPV6_HDR_TC_SHIFT IPV6_HDR_FL_MASK IPV6_HDR_TC_MASK
replace_struct sctp_hdr
replace_struct tcp_hdr
replace_struct udp_hdr
