def broadcast_cmd(worker_ip_list, worker_port_list, opcode, data=None):
    """Broadcast a POST request to all the workers
    Use multiple processes to send POST requests to a specified
    endpoint of all the workers simultaneously.

    Args:
      worker_ip_list (list): A list of IP addresses to broadcast the POST request
      worker_port (int): The port of the workers
      opcode (str): The REST API endpoint
      topo_size (int): The number of topology switches
      data (dict): JSON data to go with the request

    Returns:
      list: A list of responses for all the POST requests performed
    """

    if data is not None and 'is_serial' in data:
        is_serial = data['is_serial']
    else:
        logging.info('[{0}] POST data is None. Setting is_serial to False'.
                     format(opcode))
        is_serial = False

    if opcode == 'init':
        dpid_offset_list = dpid_offset_range(len(worker_ip_list))
        offset_idx = 0

    processes = []
    result_queue = multiprocessing.Queue()

    for worker_ip, worker_port in zip(worker_ip_list, worker_port_list):
        if opcode == 'init':
            data['dpid_offset'] = dpid_offset_list[offset_idx]
            offset_idx += 1

        if is_serial:
            # Serial send REST requests to workers
            logging.info('[{0}] is running in serial mode'.format(opcode))
            processes.append(make_post_request(worker_ip, worker_port, opcode,
                                               data))
        else:
            # Parallel send REST requests to workers
            logging.info('[{0}] is running in parallel mode'.format(opcode))
            process = multiprocessing.Process(target=make_post_request_runner,
                                              args=(worker_ip,
                                                    worker_port,
                                                    opcode,
                                                    data,
                                                    result_queue,))
            processes.append(process)
            process.start()

    if is_serial:
        return processes
    else:
        for process in processes:
            process.join()
        return [result_queue.get() for _ in processes]