1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
|
return(TCL_OK);
}
static int tuapi_ifconfig_conf(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], int sock, int sock_v4, int sock_v6) {
Tcl_Obj *option_name_obj, *option_val_obj;
Tcl_Obj **flags_objv;
struct ifreq iface_req;
struct sockaddr *tmp_ioctl_addr;
const char *iface;
short flags;
int flags_objc;
int tmp_sock, tmp_ioctl;
int ioctl_ret, tcl_ret, parse_ret;
|
>
|
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
|
return(TCL_OK);
}
static int tuapi_ifconfig_conf(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], int sock, int sock_v4, int sock_v6) {
Tcl_Obj *option_name_obj, *option_val_obj;
Tcl_Obj **flags_objv;
Tcl_WideInt option_val_wide;
struct ifreq iface_req;
struct sockaddr *tmp_ioctl_addr;
const char *iface;
short flags;
int flags_objc;
int tmp_sock, tmp_ioctl;
int ioctl_ret, tcl_ret, parse_ret;
|
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
|
}
objc -= 2;
objv += 2;
for (; objc > 0; objc--,objv++) {
/* Prepare for an ioctl() */
strcpy(iface_req.ifr_name, iface);
tmp_ioctl = -1;
option_name_obj = objv[0];
if (objc == 1) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf("option \"%s\" requires an argument", Tcl_GetString(option_name_obj)));
|
>
|
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
|
}
objc -= 2;
objv += 2;
for (; objc > 0; objc--,objv++) {
/* Prepare for an ioctl() */
memset(&iface_req, 0, sizeof(iface_req));
strcpy(iface_req.ifr_name, iface);
tmp_ioctl = -1;
option_name_obj = objv[0];
if (objc == 1) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf("option \"%s\" requires an argument", Tcl_GetString(option_name_obj)));
|
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
|
Tcl_SetObjResult(interp, Tcl_NewStringObj(strerror(errno), -1));
return(TCL_ERROR);
}
break;
case 0x5e9d03e3: /* metric */
case 0x1b7a75: /* mtu */
case 0x7c3891f2: /* hwaddr */
case 0xbf72a969: /* addmulti */
case 0xba708969: /* delmulti */
case 0xdd876e5: /* name */
Tcl_SetObjResult(interp, Tcl_ObjPrintf("option \"%s\" unsupported", Tcl_GetString(option_name_obj)));
return(TCL_ERROR);
break;
case 0x4e9aeaf3: /* address */
if (tmp_ioctl == -1) {
tmp_ioctl = SIOCSIFADDR;
tmp_ioctl_addr = &iface_req.ifr_addr;
}
|
<
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
|
Tcl_SetObjResult(interp, Tcl_NewStringObj(strerror(errno), -1));
return(TCL_ERROR);
}
break;
case 0x5e9d03e3: /* metric */
case 0x7c3891f2: /* hwaddr */
case 0xbf72a969: /* addmulti */
case 0xba708969: /* delmulti */
case 0xdd876e5: /* name */
Tcl_SetObjResult(interp, Tcl_ObjPrintf("option \"%s\" unsupported", Tcl_GetString(option_name_obj)));
return(TCL_ERROR);
break;
case 0x1b7a75: /* mtu */
tcl_ret = Tcl_GetWideIntFromObj(interp, option_val_obj, &option_val_wide);
if (tcl_ret != TCL_OK) {
return(tcl_ret);
}
iface_req.ifr_mtu = option_val_wide;
ioctl_ret = ioctl(sock, SIOCSIFMTU, &iface_req);
if (ioctl_ret != 0) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(strerror(errno), -1));
return(TCL_ERROR);
}
break;
case 0x4e9aeaf3: /* address */
if (tmp_ioctl == -1) {
tmp_ioctl = SIOCSIFADDR;
tmp_ioctl_addr = &iface_req.ifr_addr;
}
|