blob: 69e89f87787c6a4ba43724f5d8df7c9ef4427daa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
heat_template_version: pike
# NOTE: You don't need to pass the parameter explicitly from the
# parent template, it can be specified via the parameter_defaults
# in the resource_registry instead, if you want to override the default
# and/or share values with other templates in the tree.
parameters:
ContrailRepo:
type: string
default: ''
ContrailVrouterPhysicalInterface:
default: 'eth0'
description: vRouter physical interface
type: string
ContrailVlanParentInterface:
default: ''
description: Parent interface of vlan interface
type: string
ContrailBondInterface:
default: ''
description: Bond interface name
type: string
ContrailBondInterfaceMembers:
default: ''
description: Bond interface members
type: string
ContrailBondMode:
default: '4'
description: Bond Mode
type: string
ContrailBondPolicy:
default: '1'
description: Bond Policy
type: string
RoleParameters:
type: json
description: Parameters specific to the role
default: {}
ServiceNames:
type: comma_delimited_list
default: []
server:
type: string
description: >
This template installs the Contrail kernel module packages in order
to bring vhost0 interface up. Vhost0 interface must be up before
os-net-config takes over.
resources:
ContrailVrouterModuleDeployment:
type: OS::Heat::SoftwareDeployment
properties:
name: ContrailVrouterModuleDeployment
server: {get_param: server}
config: {get_resource: ContrailVrouterModuleConfig}
input_values:
phy_int: {get_param: ContrailVrouterPhysicalInterface}
bond_int: {get_param: ContrailBondInterface}
bond_int_members: {get_param: ContrailBondInterfaceMembers}
vlan_parent: {get_param: ContrailVlanParentInterface}
contrail_repo: {get_param: ContrailRepo}
bond_mode: {get_param: ContrailBondMode}
bond_policy: {get_param: ContrailBondPolicy}
actions: ['CREATE'] # Only do this on CREATE
ContrailVrouterModuleConfig:
type: OS::Heat::SoftwareConfig
properties:
group: script
inputs:
- name: phy_int
- name: bond_int
- name: bond_int_members
- name: vlan_parent
- name: contrail_repo
- name: bond_mode
- name: bond_policy
config: |
#!/bin/bash
phy_int=$phy_int
bond_int=$bond_int
bond_int_members=$bond_int_members
bond_mode=$bond_mode
bond_policy=$bond_policy
vlan_parent=$vlan_parent
contrail_repo=$contrail_repo
if [[ ${contrail_repo} ]]; then
yum install -y contrail-vrouter-utils
fi
function pkt_setup () {
for f in /sys/class/net/$1/queues/rx-*
do
q="$(echo $f | cut -d '-' -f2)"
r=$(($q%32))
s=$(($q/32))
((mask=1<<$r))
str=(`printf "%x" $mask`)
if [ $s -gt 0 ]; then
for ((i=0; i < $s; i++))
do
str+=,00000000
done
fi
echo $str > $f/rps_cpus
done
ifconfig $1 up
}
function insert_vrouter() {
if [ -f /sys/class/net/pkt1/queues/rx-0/rps_cpus ]; then
pkt_setup pkt1
fi
if [ -f /sys/class/net/pkt2/queues/rx-0/rps_cpus ]; then
pkt_setup pkt2
fi
if [ -f /sys/class/net/pkt3/queues/rx-0/rps_cpus ]; then
pkt_setup pkt3
fi
DEV_MAC=$(cat /sys/class/net/${phy_int}/address)
vif --create vhost0 --mac $DEV_MAC
vif --add ${phy_int} --mac $DEV_MAC --vrf 0 --vhost-phys --type physical
vif --add vhost0 --mac $DEV_MAC --vrf 0 --type vhost --xconnect ${phy_int}
ip link set vhost0 up
return 0
}
if [[ ${bond_int} ]]; then
bond_int_member_list=$(echo ${bond_int_members} | tr "," "\n")
ip link add name ${bond_int} type bond
echo ${bond_mode} > /sys/class/net/${bond_int}/bonding/mode
echo ${bond_policy} > /sys/class/net/${bond_int}/bonding/xmit_hash_policy
for member in ${bond_int_member_list}; do
ip link set dev $member master ${bond_int}
done
fi
if [[ ${vlan_parent} ]]; then
vlanId=`echo ${phy_int} | awk -F"vlan" '{print $2}'`
ip link add name ${phy_int} link ${vlan_parent} type vlan id ${vlanId}
fi
if [[ ${contrail_repo} ]]; then
yumdownloader contrail-vrouter --destdir /tmp
cd /tmp
rpm2cpio /tmp/contrail-vrouter*.rpm | cpio -idmv
cp `find /tmp/lib/modules -name vrouter.ko |tail -1` /tmp
insmod /tmp/vrouter.ko
else
modprobe vrouter
fi
insert_vrouter
if [[ `ifconfig ${phy_int} |grep "inet "` ]]; then
def_gw=''
if [[ `ip route show |grep default|grep ${phy_int}` ]]; then
def_gw=`ip route show |grep default|grep ${phy_int}|awk '{print $3}'`
fi
ip=`ifconfig ${phy_int} |grep "inet "|awk '{print $2}'`
mask=`ifconfig ${phy_int} |grep "inet "|awk '{print $4}'`
ip address delete $ip/$mask dev ${phy_int}
ip address add $ip/$mask dev vhost0
if [[ $def_gw ]]; then
ip route add default via $def_gw
fi
fi
|