blob: e1ceea697a1eb23e5c7f599c211cb4a2e6ad8b6b [file] [log] [blame]
#!/usr/bin/python
#coding: utf8
#Copyright © 2016 - 2017 Copyright (c) Sprint, Inc. and others. All rights
#reserved.
#
#This program and the accompanying materials are made available under the
#terms of the Eclipse Public License v1.0 which accompanies this distribution,
#and is available at http://www.eclipse.org/legal/epl-v10.html
#
############################################################################
# File : pcc_rules.py
#
# Comments :
# Read PCC Rules config file from './config/' and get parameters
# values as per the PCC Rule Table.
# As per PCC Rule table, formed a structure and parse values in structure,
# and finally pack a structure and send over the zmq(PUB/SUB) socket to DP.
#
# Reference : message_sdn_dp.docx
# Section : Table No.12 PCC Rule
############################################################################
import sys
import os
import time
import struct
import socket
from configparser import ConfigParser
parser = ConfigParser()
def parse_pcc_values(pub_socket,topicId):
# TBD: Need to handle exception
parser.read('./config/pcc_rules.cfg')
print "\n ---> Reading Values from PCC config file <--- \n"
print "\n ---> Sending PCC Rules <---"
MSG_TYPE = 18
RULE_ID = 0
# Create a struture for PCC rule and parse the values in that.
for val in parser.sections():
if val != 'GLOBAL':
# TBD: Need to handle exception
#RULE_ID = int(parser.get(val, 'RULE_ID'))
RULE_ID += 1
RULE_NAME = str(parser.get(val, 'RULE_NAME'))
RATING_GROUP = int(parser.get(val, 'RATING_GROUP'))
SERVICE_ID = int(parser.get(val, 'SERVICE_ID'))
RULE_STATUS = int(parser.get(val, 'RULE_STATUS'))
GATE_STATUS = int(parser.get(val, 'GATE_STATUS'))
SESSION_CONT = int(parser.get(val, 'SESSION_CONT'))
REPORT_LEVEL = int(parser.get(val, 'REPORT_LEVEL'))
CHARGING_MODE = int(parser.get(val, 'CHARGING_MODE'))
METERING_METHOD = int(parser.get(val, 'METERING_METHOD'))
MUTE_NOTIFY = int(parser.get(val, 'MUTE_NOTIFY'))
MONITORING_KEY = int(parser.get(val, 'MONITORING_KEY'))
SPONSOR_ID = str(parser.get(val, 'SPONSOR_ID'))
REDIRECT_INFO = int(parser.get(val, 'REDIRECT_INFO'))
PRECEDENCE = int(parser.get(val, 'PRECEDENCE'))
DROP_PKT_COUNT = int(parser.get(val, 'DROP_PKT_COUNT'))
UL_MBR_MTR_PROFILE_IDX = int(parser.get(val, \
'UL_MBR_MTR_PROFILE_IDX'))
DL_MBR_MTR_PROFILE_IDX = int(parser.get(val, \
'DL_MBR_MTR_PROFILE_IDX'))
var = struct.Struct('!BBBBHBBBLLBBQHHBI'+str(\
len(RULE_NAME))+'sI'\
+str(len(SPONSOR_ID))+'s')
values = (topicId, MSG_TYPE, METERING_METHOD, \
CHARGING_MODE, RATING_GROUP, \
RULE_STATUS, GATE_STATUS, SESSION_CONT,\
MONITORING_KEY, PRECEDENCE, \
REPORT_LEVEL, MUTE_NOTIFY, \
DROP_PKT_COUNT, \
UL_MBR_MTR_PROFILE_IDX, \
DL_MBR_MTR_PROFILE_IDX, \
REDIRECT_INFO,\
len(RULE_NAME), RULE_NAME, \
len(SPONSOR_ID), SPONSOR_ID)
# TBD: Need to handle exception
# Pack the structure and send over the zmq socket to dp
pub_socket.send("%s" % (var.pack(*values)))
time.sleep(1)
print "\nPCC Rule Values for %s ::\nRULE_ID :%s \
\nRULE_NAME :%s\nRATING_GROUP :%s\
\nSERVICE_ID :%s\nRULE_STATUS :%s\
\nGATE_STATUS :%s\nSESSION_CONT :%s\
\nREPORT_LEVEL :%s \nCHARGING_MODE :%s\
\nMETERING_METHOD :%s\nMUTE_NOTIFY :%s\
\nMONITORING_KEY :%s\nSPONSOR_ID :%s\
\nREDIRECT_INFO :%s\nPRECEDENCE :%s\
\nDROP_PKT_COUNT :%s\
\nul_mbr_DROP_PKT_COUNT :%s\
\ndl_mbr_DROP_PKT_COUNT :%s\n\n" % \
(val, RULE_ID, RULE_NAME, RATING_GROUP,\
SERVICE_ID, RULE_STATUS, GATE_STATUS, \
SESSION_CONT, REPORT_LEVEL, \
CHARGING_MODE, METERING_METHOD, \
MUTE_NOTIFY, MONITORING_KEY, \
SPONSOR_ID, REDIRECT_INFO, PRECEDENCE,\
DROP_PKT_COUNT, UL_MBR_MTR_PROFILE_IDX,\
DL_MBR_MTR_PROFILE_IDX)
print '\n ---># PCC Rule Successfully sent..#<---\n'
parser.clear()