changes to add back in coresendmsg udp support

This commit is contained in:
Blake Harnden 2019-06-06 11:33:22 -07:00
parent 70abb8cc14
commit e59a8bf66d
4 changed files with 189 additions and 13 deletions

View file

@ -9,13 +9,14 @@ import ConfigParser
import logging
import optparse
import sys
import threading
import time
from core import load_logging_config
from core import constants
from core import enumerations
from core.corehandlers import CoreHandler
from core.coreserver import CoreServer
from core import load_logging_config
from core.corehandlers import CoreHandler, CoreUdpHandler
from core.coreserver import CoreServer, CoreUdpServer
from core.misc.utils import close_onexec
load_logging_config()
@ -30,6 +31,21 @@ def banner():
logging.info("CORE daemon v.%s started %s", constants.COREDPY_VERSION, time.ctime())
def start_udp(mainserver, server_address):
"""
Start a thread running a UDP server on the same host,port for
connectionless requests.
:param CoreServer mainserver: main core tcp server to piggy back off of
:param server_address:
:return: CoreUdpServer
"""
mainserver.udpserver = CoreUdpServer(server_address, CoreUdpHandler, mainserver)
mainserver.udpthread = threading.Thread(target=mainserver.udpserver.start)
mainserver.udpthread.daemon = True
mainserver.udpthread.start()
def cored(cfg, use_ovs):
"""
Start the CoreServer object and enter the server loop.
@ -44,18 +60,24 @@ def cored(cfg, use_ovs):
host = "localhost"
try:
server = CoreServer((host, port), CoreHandler, cfg)
address = (host, port)
server = CoreServer(address, CoreHandler, cfg)
if use_ovs:
from core.netns.openvswitch import OVS_NODES
server.coreemu.update_nodes(OVS_NODES)
# start udp server
start_udp(server, address)
# close handlers
close_onexec(server.fileno())
logging.info("tcp/udp servers started, listening on: %s:%s", host, port)
server.serve_forever()
except:
logging.exception("error starting main server on: %s:%s", host, port)
sys.exit(1)
close_onexec(server.fileno())
logging.info("server started, listening on: %s:%s", host, port)
server.serve_forever()
def get_merged_config(filename):
"""

View file

@ -186,6 +186,8 @@ def main():
help="Listen for a response message and print it.")
parser.add_option("-t", "--list-tlvs", dest="tlvs", action="store_true",
help="List TLVs for the specified message type.")
parser.add_option("--tcp", dest="tcp", action="store_true",
help="Use TCP instead of UDP and connect to a session default: %s" % parser.defaults["tcp"])
def usage(msg=None, err=0):
sys.stdout.write("\n")
@ -249,7 +251,12 @@ def main():
msg = msg_cls.pack(flags, tlvdata)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if opt.tcp:
protocol = socket.SOCK_STREAM
else:
protocol = socket.SOCK_DGRAM
sock = socket.socket(socket.AF_INET, protocol)
sock.setblocking(True)
try:
@ -258,7 +265,7 @@ def main():
print "Error connecting to %s:%s:\n\t%s" % (opt.address, opt.port, e)
sys.exit(1)
if not connect_to_session(sock, opt.session):
if opt.tcp and not connect_to_session(sock, opt.session):
print "warning: continuing without joining a session!"
sock.sendall(msg)