blob: 8082208881a12ee76d0f4a41cde3b2e1076f7377 [file] [log] [blame]
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -07001---
2# Copyright 2018-present Open Networking Foundation
3# Copyright 2018 Intel Corporation
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16---
17apiVersion: v1
18kind: ServiceAccount
19metadata:
20 name: spgwc-pod-reader
21---
22kind: Role
23apiVersion: rbac.authorization.k8s.io/v1
24metadata:
25 name: pod-reader
26rules:
27- apiGroups: [""]
28 resources: ["pods"]
29 verbs: ["get"]
30---
31kind: RoleBinding
32apiVersion: rbac.authorization.k8s.io/v1
33metadata:
34 name: spgwc-pod-reader-rb
35roleRef:
36 apiGroup: rbac.authorization.k8s.io
37 kind: Role
38 name: pod-reader
39subjects:
40- kind: ServiceAccount
41 name: spgwc-pod-reader
42---
43apiVersion: v1
44kind: ConfigMap
45metadata:
46 name: {{ .Values.spgwc.name }}
47data:
48 launch.sh: |
49 #!/bin/bash -xe
50
51 RUN_DIR=${RUN_DIR:-"/opt/cp"}
52 mkdir -p $RUN_DIR/config
53 cd $RUN_DIR/config
54 cp /etc/cp/config/{adc_rules.cfg,cp_config.cfg,interface.cfg,meter_profile.cfg,pcc_rules.cfg,sdf_rules.cfg} .
55 sed -i "s/CP_ADDR/$CP_ADDR/g" interface.cfg
56 sed -i "s/DP_ADDR/$DP_ADDR/g" interface.cfg
57 . cp_config.cfg
58 ngic_controlplane $EAL_ARGS -- $APP_ARGS
59 cp_config.cfg: |
60 if [ ! -d "/dev/hugepages" ]; then
61 MEMORY="--no-huge -m $((MEM_LIMIT-1024))"
62 fi
63 SHARED_DIR="/opt/cp/config/shared"
64 if [ -d ${SHARED_DIR} ]; then
65 while [ ! -f ${SHARED_DIR}/SGW_S1U_IP ]; do echo "Waiting for SGW_S1U_IP"; sleep 2; done
66 SGW_S1U_IP=$(cat ${SHARED_DIR}/SGW_S1U_IP)
67 fi
Hyunsun Moone5c66fe2019-08-02 13:11:46 -060068 until dig +short ${MME_S11_IP} | grep -v -e '^$' > /dev/null; do
69 echo "Waiting for MME";
70 sleep 5;
71 done
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070072
73 MGMT_INFO="-s ${CP_ADDR} -m ${MME_S11_IP} -w ${SGW_S1U_IP}"
74 APN_INFO="-i ${IP_POOL_IP} -p ${IP_POOL_MASK} -a ${APN}"
75 SPGW_CFG="-d 03 -l 2 -r 7.7.7.7 -g 6.6.6.6 -v 4.4.4.4 -u 5.5.5.5"
76 APP_ARGS="${MGMT_INFO} ${APN_INFO} ${SPGW_CFG} ${TEID_INFO}"
77
78 CORES="-c $(taskset -p $$ | awk '{print $NF}')"
79 DEVICES="--no-pci"
80 EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}"
81 interface.cfg: |
82 [0]
83 dp_comm_ip = DP_ADDR
84 dp_comm_port = 20
85 cp_comm_ip = CP_ADDR
86 cp_comm_port = 21
87 adc_rules.cfg: |
88 [GLOBAL]
89 NUM_ADC_RULES = 5
90
91 ;FORMAT ::
92 ;ADC_TYPE : [ DOMAIN = 0 | IP = 1 | IP PREFIX =2 ]
93 ;
94 ;if ADC_TYPE = 0
95 ; DOMAIN
96 ;elseif ADC_TYPE = 1
97 ; IP
98 ;elseif ADC_TYPE = 2
99 ; IP
100 ; PREFIX
101 ;else
102 ; NONE
103 ;
104 ;NOTE :
105 ;Rules defined first have a higher priority, unless DROP is specified
106 ;(i.e. multiple rules for the same IP).
107 ;When specifying DROP with an IP address, use a prefix of 32 to prevent DNS
108 ;results from overwriting rule.
109
110
111 [ADC_RULE_1]
112 ADC_TYPE = 1
113 IP = 13.1.1.111
114
115 [ADC_RULE_2]
116 ADC_TYPE = 2
117 IP = 13.1.1.0
118 PREFIX = 24
119
120 [ADC_RULE_3]
121 ADC_TYPE = 1
122 IP = 13.1.1.112
123 PREFIX = 24
124
125 [ADC_RULE_4]
126 ADC_TYPE = 0
127 DOMAIN = www.example.gov
128
129 [ADC_RULE_5]
130 ADC_TYPE = 0
131 DOMAIN = www.drop_example.com
132 meter_profile.cfg: |
133 [GLOBAL]
134 NUM_OF_IDX = 7
135
136 [ENTRY_1]
137 ;Committed Information Rate (CIR). Measured in bytes per second.
138 ;MBR is mapped into CIR, convert MBR from bits to Bytes and set CIR.
139 CIR = 2342400
140 ;Committed Burst Size unit = Bytes
141 CBS = 5856
142 ;Excess Burst Size unit = Bytes
143 EBS = 11712
144 ;Meter profile index. Refer this index in static_pcc.cfg to set AMBR/MBR
145 MTR_PROFILE_IDX = 3
146
147 [ENTRY_2]
148 ;1200 = 1756800
149 ;1400 = 2049600
150 ;1600 = 2342400
151 CIR = 2342400
152 CBS = 5856
153 EBS = 11712
154 MTR_PROFILE_IDX = 4
155
156 [ENTRY_3]
157 ; QCI5,QCI7 15.571kbps = 1947 B
158 CIR = 2342400
159 CBS = 5856
160 EBS = 11712
161 MTR_PROFILE_IDX = 5
162
163 [ENTRY_4]
164 ; QCI1, 44kbps = 5500 B
165 CIR = 2342400
166 CBS = 5856
167 EBS = 11712
168 MTR_PROFILE_IDX = 6
169
170 [ENTRY_5]
171 ; QCI9, 31.143kbps = 3893 B
172 CIR = 2342400
173 CBS = 5856
174 EBS = 11712
175 MTR_PROFILE_IDX = 7
176
177 [ENTRY_6]
178 ; 128B, 7pps
179 CIR = 2342400
180 CBS = 512
181 EBS = 1024
182 MTR_PROFILE_IDX = 8
183
184 [ENTRY_7]
185 ; 128B, 2pps
186 CIR = 2342400
187 CBS = 512
188 EBS = 1024
189 MTR_PROFILE_IDX = 9
190
191 pcc_rules.cfg: |
192 [GLOBAL]
193 NUM_PCC_FILTERS = 9
194 ;To config AMBR/MBR values refer meter_profile.cfg. specify only the
195 ;meter profile index to be set here.
196 UL_AMBR_MTR_PROFILE_IDX = 3
197 DL_AMBR_MTR_PROFILE_IDX = 4
198
199 ;default filter - must be first for now (until DP doesn't install any filters)
200 ;associated with default adc rule
201 [PCC_FILTER_1]
202 RULE_NAME = DefaultRule
203 RATING_GROUP = 9
204 SERVICE_ID = 0
205 RULE_STATUS = 0
206 GATE_STATUS = 1
207 SESSION_CONT = 0
208 REPORT_LEVEL = 1
209 CHARGING_MODE = 0
210 METERING_METHOD = 0
211 MUTE_NOTIFY = 0
212 MONITORING_KEY = 0
213 SPONSOR_ID = 0
214 REDIRECT_INFO = 0
215 PRECEDENCE = 254
216 DROP_PKT_COUNT = 0
217 ;Specify the meter profile index from meter_profile.cfg
218 UL_MBR_MTR_PROFILE_IDX = 7
219 DL_MBR_MTR_PROFILE_IDX = 7
220 ;List of ADC filter indices
221 SDF_FILTER_IDX = 99998
222
223 [PCC_FILTER_2]
224 RULE_NAME = sdf_rule_1
225 RATING_GROUP = 5
226 SERVICE_ID = 0
227 RULE_STATUS = 0
228 GATE_STATUS = 1
229 SESSION_CONT = 0
230 REPORT_LEVEL = 2
231 CHARGING_MODE = 0
232 METERING_METHOD = 0
233 MUTE_NOTIFY = 0
234 MONITORING_KEY = 0
235 SPONSOR_ID = 0
236 REDIRECT_INFO = 0
237 PRECEDENCE = 1
238 DROP_PKT_COUNT = 0
239 UL_MBR_MTR_PROFILE_IDX = 5
240 DL_MBR_MTR_PROFILE_IDX = 5
241 ;List of SDF filter indices
242 SDF_FILTER_IDX = 1
243
244 [PCC_FILTER_3]
245 RULE_NAME = sdf_rule_2
246 RATING_GROUP = 1
247 SERVICE_ID = 0
248 RULE_STATUS = 0
249 GATE_STATUS = 1
250 SESSION_CONT = 0
251 REPORT_LEVEL = 3
252 CHARGING_MODE = 0
253 METERING_METHOD = 0
254 MUTE_NOTIFY = 0
255 MONITORING_KEY = 0
256 SPONSOR_ID = 0
257 REDIRECT_INFO = 0
258 PRECEDENCE = 18
259 DROP_PKT_COUNT = 0
260 UL_MBR_MTR_PROFILE_IDX = 6
261 DL_MBR_MTR_PROFILE_IDX = 6
262 ;List of SDF filter indices
263 SDF_FILTER_IDX = 2
264
265 [PCC_FILTER_4]
266 RULE_NAME = adc_rule_1
267 RATING_GROUP = Zero-Rate
268 SERVICE_ID = Internet
269 RULE_STATUS = 0
270 GATE_STATUS = 1
271 SESSION_CONT = 0
272 REPORT_LEVEL = 8
273 CHARGING_MODE = 0
274 METERING_METHOD = 0
275 MUTE_NOTIFY = 0
276 MONITORING_KEY = 0
277 REDIRECT_INFO = 0
278 SPONSOR_ID = Example
279 PRECEDENCE = 15
280 DROP_PKT_COUNT = 0
281 UL_MBR_MTR_PROFILE_IDX = 7
282 DL_MBR_MTR_PROFILE_IDX = 7
283 ;List of SDF filter indices
284 ADC_FILTER_IDX = 1
285
286 [PCC_FILTER_5]
287 RULE_NAME = adc_rule_2
288 RATING_GROUP = 0
289 SERVICE_ID = CIPA
290 RULE_STATUS = 0
291 GATE_STATUS = 1
292 SESSION_CONT = 0
293 REPORT_LEVEL = 9
294 CHARGING_MODE = 0
295 METERING_METHOD = 0
296 MUTE_NOTIFY = 0
297 MONITORING_KEY = 0
298 SPONSOR_ID = Example
299 REDIRECT_INFO = 0
300 SPONSOR_ID = Example
301 REDIRECT_INFO = 0
302 PRECEDENCE = 4
303 DROP_PKT_COUNT = 0
304 UL_MBR_MTR_PROFILE_IDX = 0
305 DL_MBR_MTR_PROFILE_IDX = 0
306 ;List of SDF filter indices
307 ADC_FILTER_IDX = 2
308
309 [PCC_FILTER_6]
310 RULE_NAME = sdf_rule_3
311 RATING_GROUP = 7
312 SERVICE_ID = 0
313 RULE_STATUS = 0
314 GATE_STATUS = 1
315 SESSION_CONT = 0
316 REPORT_LEVEL = 4
317 CHARGING_MODE = 0
318 METERING_METHOD = 0
319 MUTE_NOTIFY = 0
320 MONITORING_KEY = 0
321 SPONSOR_ID = 0
322 REDIRECT_INFO = 0
323 PRECEDENCE = 17
324 DROP_PKT_COUNT = 0
325 UL_MBR_MTR_PROFILE_IDX = 5
326 DL_MBR_MTR_PROFILE_IDX = 5
327 ;List of SDF filter indices
328 SDF_FILTER_IDX = 3
329
330 [PCC_FILTER_7]
331 RULE_NAME = adc_rule_3
332 RATING_GROUP = Zero-Rate
333 SERVICE_ID = Internet
334 RULE_STATUS = 0
335 GATE_STATUS = 1
336 SESSION_CONT = 0
337 REPORT_LEVEL = 5
338 CHARGING_MODE = 0
339 METERING_METHOD = 0
340 MUTE_NOTIFY = 0
341 MONITORING_KEY = 0
342 SPONSOR_ID = Example
343 REDIRECT_INFO = 0
344 PRECEDENCE = 210
345 DROP_PKT_COUNT = 0
346 UL_MBR_MTR_PROFILE_IDX = 7
347 DL_MBR_MTR_PROFILE_IDX = 7
348 ;List of SDF filter indices
349 ADC_FILTER_IDX = 4
350
351 [PCC_FILTER_8]
352 RULE_NAME = adc_rule_4
353 RATING_GROUP = Zero-Rate
354 SERVICE_ID = Management
355 RULE_STATUS = 0
356 GATE_STATUS = 1
357 SESSION_CONT = 0
358 REPORT_LEVEL = 6
359 CHARGING_MODE = 0
360 METERING_METHOD = 0
361 MUTE_NOTIFY = 0
362 MONITORING_KEY = 0
363 SPONSOR_ID = Example
364 REDIRECT_INFO = 0
365 PRECEDENCE = 200
366 DROP_PKT_COUNT = 0
367 UL_MBR_MTR_PROFILE_IDX = 7
368 DL_MBR_MTR_PROFILE_IDX = 7
369 ;List of SDF filter indices
370 ADC_FILTER_IDX = 12
371
372 [PCC_FILTER_9]
373 RULE_NAME = adc_rule_5
374 RATING_GROUP = Zero-Rate
375 SERVICE_ID = Provisioning
376 RULE_STATUS = 0
377 GATE_STATUS = 1
378 SESSION_CONT = 0
379 REPORT_LEVEL = 7
380 CHARGING_MODE = 0
381 METERING_METHOD = 0
382 MUTE_NOTIFY = 0
383 MONITORING_KEY = 0
384 SPONSOR_ID = Example
385 REDIRECT_INFO = 0
386 PRECEDENCE = 220
387 DROP_PKT_COUNT = 0
388 UL_MBR_MTR_PROFILE_IDX = 7
389 DL_MBR_MTR_PROFILE_IDX = 7
390 ;List of SDF filter indices
391 ADC_FILTER_IDX = 3
392 sdf_rules.cfg: |
393 [GLOBAL]
394 NUM_SDF_FILTERS = 4
395
396 [SDF_FILTER_1]
397 DIRECTION = downlink_only
398 IPV4_REMOTE = 13.2.1.113
399 IPV4_REMOTE_MASK = 255.255.255.0
400 PROTOCOL = 17
401 LOCAL_LOW_LIMIT_PORT = 0
402 LOCAL_HIGH_LIMIT_PORT = 65535
403 REMOTE_LOW_LIMIT_PORT = 0
404 REMOTE_HIGH_LIMIT_PORT = 65535
405
406 [SDF_FILTER_2]
407 DIRECTION = uplink_only
408 IPV4_LOCAL = 16.255.255.0
409 IPV4_LOCAL_MASK = 255.255.255.0
410 PROTOCOL = 17
411 LOCAL_LOW_LIMIT_PORT = 0
412 LOCAL_HIGH_LIMIT_PORT = 65535
413 REMOTE_LOW_LIMIT_PORT = 0
414 REMOTE_HIGH_LIMIT_PORT = 65535
415
416 [SDF_FILTER_3]
417 DIRECTION = downlink_only
418 IPV4_REMOTE = 130.10.0.0
419 IPV4_REMOTE_MASK = 255.255.0.0
420 PROTOCOL = 17
421 REMOTE_LOW_LIMIT_PORT = 5060
422 REMOTE_HIGH_LIMIT_PORT = 5060
423
424 [SDF_FILTER_4]
425 DIRECTION = uplink_only
426 IPV4_REMOTE = 103.1.0.0
427 IPV4_REMOTE_MASK = 255.255.0.0
428 PROTOCOL = 17
429 LOCAL_LOW_LIMIT_PORT = 17000
430 LOCAL_HIGH_LIMIT_PORT = 17010
431---
432apiVersion: v1
433kind: Service
434metadata:
435 name: {{ .Values.spgwc.name }}
436spec:
437 selector:
438 app: {{ .Values.spgwc.name }}
439 clusterIP: None
440 ports:
441 - name: s11
442 port: 2123
443 protocol: UDP
444 - name: cpdp
445 port: 21
446 protocol: UDP
447---
448apiVersion: apps/v1
449kind: StatefulSet
450metadata:
451 name: {{ .Values.spgwc.name }}
452 labels:
453 app: {{ .Values.spgwc.name }}
454spec:
455 replicas: 1
456 selector:
457 matchLabels:
458 app: {{ .Values.spgwc.name }}
459 serviceName: {{ .Values.spgwc.name | quote }}
460 template:
461 metadata:
462 labels:
463 app: {{ .Values.spgwc.name }}
464 spec:
465 serviceAccount: spgwc-pod-reader
466 initContainers:
467 - name: init-spgwc
468 image: {{ .Values.spgwc.initimage }}
469 command: ["/bin/sh", "-co", "pipefail"]
470 args:
Hyunsun Moon2bed68b2019-07-19 17:15:35 -0600471 - until $(kubectl get pod -ojson spgwu-0 2>/dev/null | jq -r '.metadata.annotations["k8s.v1.cni.cncf.io/networks-status"]' | jq -r '.[] | select(.name=="s1u-net") | .ips[0]' > /opt/cp/config/shared/SGW_S1U_IP | [ -s /opt/cp/config/shared/SGW_S1U_IP ]);
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700472 do echo "waiting for SPGWU"; sleep 2; done
473 volumeMounts:
474 - name: shared-data
475 mountPath: /opt/cp/config/shared
476 containers:
477 - name: spgwc
478 image: {{ .Values.spgwc.image }}
479 imagePullPolicy: {{ .Values.global.imagepullpolicy }}
480 stdin: true
481 tty: true
482 command: ["/opt/cp/scripts/launch.sh"]
483 env:
484 - name: MEM_LIMIT
485 valueFrom:
486 resourceFieldRef:
487 containerName: spgwc
488 resource: limits.memory
489 divisor: 1Mi
490 #- name: SGW_S1U_IP
491 # value: "11.1.1.1"
492 - name: CP_ADDR
493 valueFrom:
494 fieldRef:
495 fieldPath: status.podIP
496 - name: DP_ADDR
497 value: spgwu-0.{{ .Values.spgwu.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }}
498 - name: MME_S11_IP
Hyunsun Moon636e17d2019-07-03 12:52:15 -0500499 value: {{ tuple "mme" "identity" . | include "mcord-services.endpoint_lookup" | quote }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700500 - name: APN
501 value: apn1
502 - name: IP_POOL_IP
503 value: "16.0.0.0"
504 - name: IP_POOL_MASK
505 value: "255.0.0.0"
506 volumeMounts:
507 - name: cp-script
508 mountPath: /opt/cp/scripts/launch.sh
509 subPath: launch.sh
510 - name: cp-config
511 mountPath: /etc/cp/config
512 - name: shared-data
513 mountPath: /opt/cp/config/shared
514 #- name: hugepage
515 # mountPath: /dev/hugepages
516 resources:
517 limits:
518 #hugepages-2Mi: 4Gi
519 cpu: {{ .Values.spgwc.cpu | quote }}
520 memory: {{ .Values.spgwc.memory }}
521 volumes:
522 - name: cp-script
523 configMap:
524 name: {{ .Values.spgwc.name }}
525 defaultMode: 493
526 - name: cp-config
527 configMap:
528 name: {{ .Values.spgwc.name }}
529 defaultMode: 420
530 - name: shared-data
531 emptyDir: {}
532 #- name: hugepage
533 # emptyDir:
534 # medium: HugePages