void bridge_set_no_ipv4_addr(const char *cmd) { arglist *args; char brname[32]; char * dhcpd_intf = NULL; args = librouter_make_args(cmd); if (!check_bridge(args->argv[2], brname)) { librouter_destroy_args(args); return; } strcpy(brname, BRIDGE_NAME); strcat(brname, args->argv[2]); /*Verify DHCP Server on intf and shut it down*/ librouter_dhcp_server_get_iface(&dhcpd_intf); if (dhcpd_intf){ if (!strcmp(brname, dhcpd_intf)){ printf("%% bridge group %s has DHCP Server assigned.\n", args->argv[2]); printf("%% DHCP Server is going to be shut down.\n"); librouter_dhcp_server_set_status(0); } free (dhcpd_intf); } librouter_ip_interface_set_no_addr(brname); librouter_destroy_args(args); }
static int local_write(struct ast_channel *ast, struct ast_frame *f) { struct local_pvt *p = ast_channel_tech_pvt(ast); int res = -1; int isoutbound; if (!p) { return -1; } /* Just queue for delivery to the other side */ ao2_ref(p, 1); /* ref for local_queue_frame */ ao2_lock(p); isoutbound = IS_OUTBOUND(ast, p); if (isoutbound && (f->frametype == AST_FRAME_VOICE || f->frametype == AST_FRAME_VIDEO)) { check_bridge(ast, p); } if (!ast_test_flag(p, LOCAL_ALREADY_MASQED)) { res = local_queue_frame(p, isoutbound, f, ast, 1); } else { ast_debug(1, "Not posting to '%s' queue since already masqueraded out\n", ast_channel_name(ast)); res = 0; } ao2_unlock(p); ao2_ref(p, -1); return res; }
void bridge_setprio(const char *cmd) { arglist *args; char brname[32]; args = librouter_make_args(cmd); if (check_bridge(args->argv[1], brname)) librouter_br_setbridgeprio(brname, atoi(args->argv[3])); librouter_destroy_args(args); }
void bridge_stp(const char *cmd) /* no bridge 1 spanning-disabled */ { arglist *args; char brname[32]; args = librouter_make_args(cmd); if (check_bridge(args->argv[2], brname)) librouter_br_set_stp(brname, 1); librouter_destroy_args(args); }
void bridge_show(const char *cmd) /* show bridge 1 */ { arglist *args; char brname[32]; args = librouter_make_args(cmd); if (check_bridge(args->argv[2], brname)) { librouter_br_dump_info(brname, stdout); } librouter_destroy_args(args); }
/* Handles incoming LE_ARP_REQ and targetless LE_ARP_REQ. * See LANEv2, 7.1.5 and 7.1.30 * Returns < 0 for serious error */ static int handle_le_arp_req(struct ctrl_frame *frame, int size) { int sizeoftlvs, sizeofrsp, retval; struct ctrl_frame *rsp; struct atmlec_msg *msg; if (frame->header.lec_id == htons(lec_params.c14_lec_id)) { diag(COMPONENT, DIAG_DEBUG, "Ignoring own LE_ARP_REQUEST\n"); return 0; } retval = 0; if (frame->target_lan_dst.tag == htons(LAN_DST_MAC_ADDR)) { if (memcmp(frame->target_lan_dst.mac, lec_params.c6_mac_addr, ETH_ALEN) != 0) return (check_bridge(frame, size)); /* target was not us */ sizeofrsp = sizeof(struct ctrl_frame) + lec_params.sizeoftlvs; rsp = (struct ctrl_frame *)malloc(sizeofrsp); if (rsp == NULL) return 0; memcpy(rsp, frame, sizeof(struct ctrl_frame)); rsp->header.opcode = htons(LE_ARP_RSP); memcpy(rsp->target_atm_addr, lec_params.c1n_my_atm_addr, ATM_ESA_LEN); rsp->num_tlvs = lec_params.num_tlvs; if (lec_params.num_tlvs > 0) memcpy(rsp + 1, lec_params.tlvs, lec_params.sizeoftlvs); retval = send_frame(lec_params.ctrl_direct, rsp, sizeofrsp); free(rsp); } else if (frame->target_lan_dst.tag == htons(LAN_DST_NOT_PRESENT) && lec_params.c29_v2_capable) { sizeoftlvs = size - sizeof(struct ctrl_frame); msg = (struct atmlec_msg *)malloc(sizeof(struct atmlec_msg) + sizeoftlvs); if (msg == NULL) return -1; memset(msg, 0, sizeof(struct atmlec_msg)); msg->type = l_arp_update; memcpy(msg->content.normal.mac_addr, frame->src_lan_dst.mac, ETH_ALEN); memcpy(msg->content.normal.atm_addr, frame->src_atm_addr, ATM_ESA_LEN); msg->content.normal.flag = (frame->header.flags & REMOTE_ADDRESS) ? 1 : 0; msg->content.normal.targetless_le_arp = 1; msg->sizeoftlvs = sizeoftlvs; if (sizeoftlvs > 0) memcpy(msg + 1, frame + 1, sizeoftlvs); retval = msg_to_kernel(msg, sizeof(struct atmlec_msg) + sizeoftlvs); free(msg); } return retval; }
void bridge_set_ipv4_addr(const char *cmd) { arglist *args; char brname[32]; char *addr, *mask; args = librouter_make_args(cmd); if (!check_bridge(args->argv[1], brname)) { librouter_destroy_args(args); return; } strcpy(brname, BRIDGE_NAME); strcat(brname, args->argv[1]); addr = args->argv[3]; mask = args->argv[4]; librouter_ip_interface_set_addr(brname, addr, mask); librouter_destroy_args(args); }