Hex Artifact Content

Artifact 1594c1fd7045c7b6c897d6e6dab0f1930c71347d:


0000: 23 64 65 66 69 6e 65 20 5f 4c 49 4e 55 58 5f 53  #define _LINUX_S
0010: 4f 55 52 43 45 20 31 0a 23 69 6e 63 6c 75 64 65  OURCE 1.#include
0020: 20 3c 73 79 73 2f 73 79 73 63 61 6c 6c 2e 68 3e   <sys/syscall.h>
0030: 0a 23 69 6e 63 6c 75 64 65 20 3c 6e 65 74 69 6e  .#include <netin
0040: 65 74 2f 69 6e 2e 68 3e 0a 23 69 6e 63 6c 75 64  et/in.h>.#includ
0050: 65 20 3c 61 72 70 61 2f 69 6e 65 74 2e 68 3e 0a  e <arpa/inet.h>.
0060: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 6f  #include <sys/so
0070: 63 6b 65 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  cket.h>.#include
0080: 20 3c 73 79 73 2f 6d 6f 75 6e 74 2e 68 3e 0a 23   <sys/mount.h>.#
0090: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70  include <sys/typ
00a0: 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  es.h>.#include <
00b0: 73 79 73 2f 69 6f 63 74 6c 2e 68 3e 0a 23 69 6e  sys/ioctl.h>.#in
00c0: 63 6c 75 64 65 20 3c 73 79 73 2f 73 77 61 70 2e  clude <sys/swap.
00d0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  h>.#include <sys
00e0: 2f 73 74 61 74 2e 68 3e 0a 23 69 6e 63 6c 75 64  /stat.h>.#includ
00f0: 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e  e <stdlib.h>.#in
0100: 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e  clude <signal.h>
0110: 0a 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74  .#include <unist
0120: 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  d.h>.#include <s
0130: 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64  tring.h>.#includ
0140: 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a 23 69 6e 63  e <fcntl.h>.#inc
0150: 6c 75 64 65 20 3c 65 72 72 6e 6f 2e 68 3e 0a 23  lude <errno.h>.#
0160: 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 0a  include <tcl.h>.
0170: 0a 23 69 6e 63 6c 75 64 65 20 3c 6c 69 6e 75 78  .#include <linux
0180: 2f 73 6f 63 6b 69 6f 73 2e 68 3e 0a 23 69 6e 63  /sockios.h>.#inc
0190: 6c 75 64 65 20 3c 6c 69 6e 75 78 2f 72 6f 75 74  lude <linux/rout
01a0: 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6c  e.h>.#include <l
01b0: 69 6e 75 78 2f 69 66 2e 68 3e 0a 23 69 6e 63 6c  inux/if.h>.#incl
01c0: 75 64 65 20 3c 6c 69 6e 75 78 2f 69 66 5f 61 72  ude <linux/if_ar
01d0: 70 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6c  p.h>.#include <l
01e0: 69 6e 75 78 2f 69 66 5f 62 72 69 64 67 65 2e 68  inux/if_bridge.h
01f0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6c 69 6e 75  >.#include <linu
0200: 78 2f 6c 6f 6f 70 2e 68 3e 0a 23 69 6e 63 6c 75  x/loop.h>.#inclu
0210: 64 65 20 3c 6c 69 6e 75 78 2f 66 73 2e 68 3e 0a  de <linux/fs.h>.
0220: 0a 23 69 66 6e 64 65 66 20 48 4f 53 54 5f 4e 41  .#ifndef HOST_NA
0230: 4d 45 5f 4d 41 58 0a 2f 2a 20 53 55 53 76 32 20  ME_MAX./* SUSv2 
0240: 4c 69 6d 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65  Limit */.#define
0250: 20 48 4f 53 54 5f 4e 41 4d 45 5f 4d 41 58 20 32   HOST_NAME_MAX 2
0260: 35 35 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 46 72  55.#endif../* Fr
0270: 6f 6d 20 4c 69 6e 75 78 20 32 2e 36 20 2a 2f 0a  om Linux 2.6 */.
0280: 23 69 66 6e 64 65 66 20 4d 4e 54 5f 44 45 54 41  #ifndef MNT_DETA
0290: 43 48 0a 23 64 65 66 69 6e 65 20 4d 4e 54 5f 44  CH.#define MNT_D
02a0: 45 54 41 43 48 20 32 0a 23 65 6e 64 69 66 0a 23  ETACH 2.#endif.#
02b0: 69 66 6e 64 65 66 20 4d 4e 54 5f 45 58 50 49 52  ifndef MNT_EXPIR
02c0: 45 0a 23 64 65 66 69 6e 65 20 4d 4e 54 5f 45 58  E.#define MNT_EX
02d0: 50 49 52 45 20 34 0a 23 65 6e 64 69 66 0a 23 69  PIRE 4.#endif.#i
02e0: 66 6e 64 65 66 20 4d 53 5f 4d 4f 56 45 0a 23 64  fndef MS_MOVE.#d
02f0: 65 66 69 6e 65 20 4d 53 5f 4d 4f 56 45 20 38 31  efine MS_MOVE 81
0300: 39 32 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 55 73  92.#endif../* Us
0310: 65 72 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 20  er environment, 
0320: 66 6f 72 20 65 78 65 63 76 65 20 2a 2f 0a 65 78  for execve */.ex
0330: 74 65 72 6e 20 63 68 61 72 20 2a 2a 65 6e 76 69  tern char **envi
0340: 72 6f 6e 3b 0a 0a 2f 2a 20 52 65 2d 69 6d 70 6c  ron;../* Re-impl
0350: 65 6d 65 6e 74 20 74 68 65 73 65 20 69 66 20 6e  ement these if n
0360: 65 65 64 65 64 20 2a 2f 0a 23 69 66 64 65 66 20  eeded */.#ifdef 
0370: 53 59 53 5f 69 6e 69 74 5f 6d 6f 64 75 6c 65 0a  SYS_init_module.
0380: 73 74 61 74 69 63 20 69 6e 74 20 69 6e 69 74 5f  static int init_
0390: 6d 6f 64 75 6c 65 28 76 6f 69 64 20 2a 76 61 6c  module(void *val
03a0: 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  , unsigned long 
03b0: 6c 65 6e 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  len, const char 
03c0: 2a 61 72 67 73 29 20 7b 0a 09 72 65 74 75 72 6e  *args) {..return
03d0: 28 73 79 73 63 61 6c 6c 28 53 59 53 5f 69 6e 69  (syscall(SYS_ini
03e0: 74 5f 6d 6f 64 75 6c 65 2c 20 76 61 6c 2c 20 6c  t_module, val, l
03f0: 65 6e 2c 20 61 72 67 73 29 29 3b 0a 7d 0a 23 65  en, args));.}.#e
0400: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 59 53 5f  ndif.#ifdef SYS_
0410: 70 69 76 6f 74 5f 72 6f 6f 74 0a 73 74 61 74 69  pivot_root.stati
0420: 63 20 69 6e 74 20 70 69 76 6f 74 5f 72 6f 6f 74  c int pivot_root
0430: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 65 77  (const char *new
0440: 5f 72 6f 6f 74 2c 20 63 6f 6e 73 74 20 63 68 61  _root, const cha
0450: 72 20 2a 70 75 74 5f 6f 6c 64 29 20 7b 0a 09 72  r *put_old) {..r
0460: 65 74 75 72 6e 28 73 79 73 63 61 6c 6c 28 53 59  eturn(syscall(SY
0470: 53 5f 70 69 76 6f 74 5f 72 6f 6f 74 2c 20 6e 65  S_pivot_root, ne
0480: 77 5f 72 6f 6f 74 2c 20 70 75 74 5f 6f 6c 64 29  w_root, put_old)
0490: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
04a0: 20 2a 20 53 69 6d 70 6c 65 20 68 61 73 68 20 72   * Simple hash r
04b0: 6f 75 74 69 6e 65 20 74 6f 20 65 6e 61 62 6c 65  outine to enable
04c0: 20 73 77 69 74 63 68 69 6e 67 20 6f 6e 20 61 20   switching on a 
04d0: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6d 70  string to be imp
04e0: 6c 65 6d 65 6e 74 65 64 0a 20 2a 2f 0a 73 74 61  lemented. */.sta
04f0: 74 69 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  tic unsigned lon
0500: 67 20 74 63 6c 73 79 73 74 65 6d 5f 69 6e 74 65  g tclsystem_inte
0510: 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 28  rnal_simplehash(
0520: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 64 61 74 61  const void *data
0530: 62 75 66 2c 20 69 6e 74 20 64 61 74 61 6c 65 6e  buf, int datalen
0540: 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f  ) {..unsigned lo
0550: 6e 67 20 72 65 74 76 61 6c 20 3d 20 30 3b 0a 09  ng retval = 0;..
0560: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
0570: 68 61 72 20 2a 64 61 74 61 3b 0a 0a 09 64 61 74  har *data;...dat
0580: 61 20 3d 20 64 61 74 61 62 75 66 3b 0a 0a 09 66  a = databuf;...f
0590: 6f 72 20 28 3b 20 64 61 74 61 6c 65 6e 20 3e 20  or (; datalen > 
05a0: 30 3b 20 64 61 74 61 6c 65 6e 2d 2d 2c 64 61 74  0; datalen--,dat
05b0: 61 2b 2b 29 20 7b 0a 09 09 72 65 74 76 61 6c 20  a++) {...retval 
05c0: 5e 3d 20 28 72 65 74 76 61 6c 20 3e 3e 20 32 35  ^= (retval >> 25
05d0: 29 20 26 20 30 78 37 46 3b 0a 09 09 72 65 74 76  ) & 0x7F;...retv
05e0: 61 6c 20 3c 3c 3d 20 37 3b 0a 09 09 72 65 74 76  al <<= 7;...retv
05f0: 61 6c 20 26 3d 20 28 30 78 46 46 46 46 46 46 46  al &= (0xFFFFFFF
0600: 46 55 4c 29 3b 0a 09 09 72 65 74 76 61 6c 20 5e  FUL);...retval ^
0610: 3d 20 2a 64 61 74 61 3b 0a 09 7d 0a 0a 09 72 65  = *data;..}...re
0620: 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a  turn(retval);.}.
0630: 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64  .static unsigned
0640: 20 6c 6f 6e 67 20 74 63 6c 73 79 73 74 65 6d 5f   long tclsystem_
0650: 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68  internal_simpleh
0660: 61 73 68 5f 6f 62 6a 28 54 63 6c 5f 4f 62 6a 20  ash_obj(Tcl_Obj 
0670: 2a 74 63 6c 5f 64 61 74 61 29 20 7b 0a 09 75 6e  *tcl_data) {..un
0680: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 72 65 74 76  signed long retv
0690: 61 6c 3b 0a 09 63 68 61 72 20 2a 64 61 74 61 3b  al;..char *data;
06a0: 0a 09 69 6e 74 20 64 61 74 61 6c 65 6e 20 3d 20  ..int datalen = 
06b0: 2d 31 3b 0a 0a 09 64 61 74 61 20 3d 20 54 63 6c  -1;...data = Tcl
06c0: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
06d0: 6a 28 74 63 6c 5f 64 61 74 61 2c 20 26 64 61 74  j(tcl_data, &dat
06e0: 61 6c 65 6e 29 3b 0a 0a 09 72 65 74 76 61 6c 20  alen);...retval 
06f0: 3d 20 74 63 6c 73 79 73 74 65 6d 5f 69 6e 74 65  = tclsystem_inte
0700: 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 28  rnal_simplehash(
0710: 64 61 74 61 2c 20 64 61 74 61 6c 65 6e 29 3b 0a  data, datalen);.
0720: 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29  ..return(retval)
0730: 3b 0a 7d 0a 0a 23 69 66 20 30 0a 2f 2a 20 4e 4f  ;.}..#if 0./* NO
0740: 54 55 53 45 44 3a 20 55 6e 63 6f 6d 6d 65 6e 74  TUSED: Uncomment
0750: 20 77 68 65 6e 20 6e 65 65 64 65 64 3a 20 2a 2f   when needed: */
0760: 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64  .static unsigned
0770: 20 6c 6f 6e 67 20 74 63 6c 73 79 73 74 65 6d 5f   long tclsystem_
0780: 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68  internal_simpleh
0790: 61 73 68 5f 73 74 72 28 63 6f 6e 73 74 20 63 68  ash_str(const ch
07a0: 61 72 20 2a 64 61 74 61 29 20 7b 0a 09 75 6e 73  ar *data) {..uns
07b0: 69 67 6e 65 64 20 6c 6f 6e 67 20 72 65 74 76 61  igned long retva
07c0: 6c 3b 0a 09 69 6e 74 20 64 61 74 61 6c 65 6e 3b  l;..int datalen;
07d0: 0a 0a 09 64 61 74 61 6c 65 6e 20 3d 20 73 74 72  ...datalen = str
07e0: 6c 65 6e 28 64 61 74 61 29 3b 0a 0a 09 72 65 74  len(data);...ret
07f0: 76 61 6c 20 3d 20 74 63 6c 73 79 73 74 65 6d 5f  val = tclsystem_
0800: 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68  internal_simpleh
0810: 61 73 68 28 64 61 74 61 2c 20 64 61 74 61 6c 65  ash(data, datale
0820: 6e 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74  n);...return(ret
0830: 76 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  val);.}.#endif..
0840: 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 73 79  static int tclsy
0850: 73 74 65 6d 5f 69 6e 74 65 72 6e 61 6c 70 72 6f  stem_internalpro
0860: 63 5f 73 69 6d 70 6c 65 68 61 73 68 28 43 6c 69  c_simplehash(Cli
0870: 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
0880: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
0890: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
08a0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
08b0: 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e   {..unsigned lon
08c0: 67 20 68 61 73 68 76 61 6c 3b 0a 09 54 63 6c 5f  g hashval;..Tcl_
08d0: 4f 62 6a 20 2a 68 61 73 68 76 61 6c 5f 6f 62 6a  Obj *hashval_obj
08e0: 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d 20  ;...if (objc != 
08f0: 32 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62  2) {...Tcl_SetOb
0900: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
0910: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
0920: 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ("wrong # args: 
0930: 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 73 79  should be \"::sy
0940: 73 74 65 6d 3a 3a 69 6e 74 65 72 6e 61 6c 3a 3a  stem::internal::
0950: 68 61 73 68 20 76 61 6c 75 65 5c 22 22 2c 20 2d  hash value\"", -
0960: 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54  1));....return(T
0970: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  CL_ERROR);..}...
0980: 68 61 73 68 76 61 6c 20 3d 20 74 63 6c 73 79 73  hashval = tclsys
0990: 74 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d  tem_internal_sim
09a0: 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f 62 6a 76  plehash_obj(objv
09b0: 5b 31 5d 29 3b 0a 0a 09 68 61 73 68 76 61 6c 5f  [1]);...hashval_
09c0: 6f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a  obj = Tcl_NewObj
09d0: 28 29 3b 0a 09 54 63 6c 5f 53 65 74 57 69 64 65  ();..Tcl_SetWide
09e0: 49 6e 74 4f 62 6a 28 68 61 73 68 76 61 6c 5f 6f  IntObj(hashval_o
09f0: 62 6a 2c 20 68 61 73 68 76 61 6c 29 3b 0a 0a 09  bj, hashval);...
0a00: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
0a10: 28 69 6e 74 65 72 70 2c 20 68 61 73 68 76 61 6c  (interp, hashval
0a20: 5f 6f 62 6a 29 3b 0a 0a 09 72 65 74 75 72 6e 28  _obj);...return(
0a30: 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74  TCL_OK);.}..stat
0a40: 69 63 20 69 6e 74 20 74 63 6c 73 79 73 74 65 6d  ic int tclsystem
0a50: 5f 69 6e 74 65 72 6e 61 6c 5f 67 65 74 73 6f 63  _internal_getsoc
0a60: 6b 28 69 6e 74 20 2a 73 6f 63 6b 5f 76 34 5f 6f  k(int *sock_v4_o
0a70: 75 74 2c 20 69 6e 74 20 2a 73 6f 63 6b 5f 76 36  ut, int *sock_v6
0a80: 5f 6f 75 74 29 20 7b 0a 09 69 6e 74 20 73 6f 63  _out) {..int soc
0a90: 6b 5f 76 34 20 3d 20 2d 31 2c 20 73 6f 63 6b 5f  k_v4 = -1, sock_
0aa0: 76 36 20 3d 20 2d 31 3b 0a 09 69 6e 74 20 73 6f  v6 = -1;..int so
0ab0: 63 6b 3b 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76  ck;...if (sock_v
0ac0: 34 5f 6f 75 74 20 3d 3d 20 4e 55 4c 4c 20 26 26  4_out == NULL &&
0ad0: 20 73 6f 63 6b 5f 76 36 5f 6f 75 74 20 3d 3d 20   sock_v6_out == 
0ae0: 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e  NULL) {...return
0af0: 28 2d 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73  (-1);..}...if (s
0b00: 6f 63 6b 5f 76 34 5f 6f 75 74 20 21 3d 20 4e 55  ock_v4_out != NU
0b10: 4c 4c 29 20 7b 0a 09 09 2f 2a 0a 09 09 20 2a 20  LL) {.../*... * 
0b20: 43 68 65 63 6b 20 66 6f 72 20 49 50 76 34 20 73  Check for IPv4 s
0b30: 75 70 70 6f 72 74 20 62 65 66 6f 72 65 20 74 72  upport before tr
0b40: 79 69 6e 67 20 74 6f 20 63 72 65 61 74 65 20 61  ying to create a
0b50: 6e 20 49 50 76 34 20 73 6f 63 6b 65 74 20 74 6f  n IPv4 socket to
0b60: 0a 09 09 20 2a 20 61 76 6f 69 64 20 64 65 6d 61  ... * avoid dema
0b70: 6e 64 2d 6c 6f 61 64 69 6e 67 20 49 50 76 34 20  nd-loading IPv4 
0b80: 28 58 58 58 3a 20 54 4f 44 4f 29 0a 09 09 20 2a  (XXX: TODO)... *
0b90: 2f 0a 09 09 73 6f 63 6b 5f 76 34 20 3d 20 73 6f  /...sock_v4 = so
0ba0: 63 6b 65 74 28 41 46 5f 49 4e 45 54 2c 20 53 4f  cket(AF_INET, SO
0bb0: 43 4b 5f 44 47 52 41 4d 2c 20 30 29 3b 0a 09 7d  CK_DGRAM, 0);..}
0bc0: 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76 36 5f 6f  ...if (sock_v6_o
0bd0: 75 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  ut != NULL) {...
0be0: 2f 2a 0a 09 09 20 2a 20 43 68 65 63 6b 20 66 6f  /*... * Check fo
0bf0: 72 20 49 50 76 36 20 73 75 70 70 6f 72 74 20 62  r IPv6 support b
0c00: 65 66 6f 72 65 20 74 72 79 69 6e 67 20 74 6f 20  efore trying to 
0c10: 63 72 65 61 74 65 20 61 6e 20 49 50 76 36 20 73  create an IPv6 s
0c20: 6f 63 6b 65 74 20 74 6f 0a 09 09 20 2a 20 61 76  ocket to... * av
0c30: 6f 69 64 20 64 65 6d 61 6e 64 2d 6c 6f 61 64 69  oid demand-loadi
0c40: 6e 67 20 49 50 76 36 20 28 58 58 58 3a 20 54 4f  ng IPv6 (XXX: TO
0c50: 44 4f 29 0a 09 09 20 2a 2f 0a 09 09 73 6f 63 6b  DO)... */...sock
0c60: 5f 76 36 20 3d 20 73 6f 63 6b 65 74 28 41 46 5f  _v6 = socket(AF_
0c70: 49 4e 45 54 36 2c 20 53 4f 43 4b 5f 44 47 52 41  INET6, SOCK_DGRA
0c80: 4d 2c 20 30 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 50  M, 0);..}.../* P
0c90: 69 63 6b 20 61 20 73 6f 63 6b 65 74 20 74 6f 20  ick a socket to 
0ca0: 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 69 6e  query for the in
0cb0: 74 65 72 66 61 63 65 20 6c 69 73 74 20 2a 2f 0a  terface list */.
0cc0: 09 69 66 20 28 73 6f 63 6b 5f 76 34 20 3d 3d 20  .if (sock_v4 == 
0cd0: 2d 31 20 26 26 20 73 6f 63 6b 5f 76 36 20 3d 3d  -1 && sock_v6 ==
0ce0: 20 2d 31 29 20 7b 0a 09 09 72 65 74 75 72 6e 28   -1) {...return(
0cf0: 2d 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f  -1);..}...if (so
0d00: 63 6b 5f 76 36 20 21 3d 20 2d 31 29 20 7b 0a 09  ck_v6 != -1) {..
0d10: 09 73 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76 36 3b  .sock = sock_v6;
0d20: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73 6f 63  ..} else {...soc
0d30: 6b 20 3d 20 73 6f 63 6b 5f 76 34 3b 0a 09 7d 0a  k = sock_v4;..}.
0d40: 0a 09 69 66 20 28 73 6f 63 6b 5f 76 34 5f 6f 75  ..if (sock_v4_ou
0d50: 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a  t != NULL) {...*
0d60: 73 6f 63 6b 5f 76 34 5f 6f 75 74 20 3d 20 73 6f  sock_v4_out = so
0d70: 63 6b 5f 76 34 3b 0a 09 7d 0a 0a 09 69 66 20 28  ck_v4;..}...if (
0d80: 73 6f 63 6b 5f 76 36 5f 6f 75 74 20 21 3d 20 4e  sock_v6_out != N
0d90: 55 4c 4c 29 20 7b 0a 09 09 2a 73 6f 63 6b 5f 76  ULL) {...*sock_v
0da0: 36 5f 6f 75 74 20 3d 20 73 6f 63 6b 5f 76 36 3b  6_out = sock_v6;
0db0: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 73 6f 63  ..}...return(soc
0dc0: 6b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 4c 6f 77  k);.}../*. * Low
0dd0: 2d 6c 65 76 65 6c 20 53 79 73 74 65 6d 20 43 61  -level System Ca
0de0: 6c 6c 20 57 72 61 70 70 65 72 20 50 72 6f 63 65  ll Wrapper Proce
0df0: 64 75 72 65 73 0a 20 2a 0a 20 2a 20 54 68 65 73  dures. *. * Thes
0e00: 65 20 70 72 6f 63 65 64 75 72 65 73 20 73 68 6f  e procedures sho
0e10: 75 6c 64 20 6d 69 6e 69 6d 61 6c 6c 79 20 77 72  uld minimally wr
0e20: 61 70 20 4c 69 6e 75 78 20 6f 72 20 55 4e 49 58  ap Linux or UNIX
0e30: 20 73 79 73 74 65 6d 20 63 61 6c 6c 73 20 74 6f   system calls to
0e40: 0a 20 2a 20 65 78 70 6f 73 65 20 74 6f 20 74 68  . * expose to th
0e50: 65 20 54 63 6c 2d 6c 65 76 65 6c 2e 20 20 57 68  e Tcl-level.  Wh
0e60: 65 72 65 20 70 6f 73 73 69 62 6c 65 20 61 63 63  ere possible acc
0e70: 65 70 74 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d  ept symbolic nam
0e80: 65 73 20 72 61 74 68 65 72 0a 20 2a 20 74 68 61  es rather. * tha
0e90: 6e 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 73  n numeric values
0ea0: 20 28 2e 65 2e 67 2c 20 6c 69 73 74 20 6f 66 20   (.e.g, list of 
0eb0: 76 61 6c 75 65 73 20 74 6f 20 4f 52 20 74 6f 67  values to OR tog
0ec0: 65 74 68 65 72 20 74 6f 20 67 65 74 20 66 6c 61  ether to get fla
0ed0: 67 73 29 2e 0a 20 2a 2f 0a 73 74 61 74 69 63 20  gs).. */.static 
0ee0: 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f 6d 6f  int tclsystem_mo
0ef0: 75 6e 74 28 43 6c 69 65 6e 74 44 61 74 61 20 63  unt(ClientData c
0f00: 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
0f10: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
0f20: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
0f30: 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 4f  objv[]) {..Tcl_O
0f40: 62 6a 20 2a 6d 6f 75 6e 74 66 6c 61 67 73 5f 6f  bj *mountflags_o
0f50: 62 6a 2c 20 2a 2a 6d 6f 75 6e 74 66 6c 61 67 73  bj, **mountflags
0f60: 5f 6c 69 73 74 2c 20 2a 6d 6f 75 6e 74 66 6c 61  _list, *mountfla
0f70: 67 3b 0a 09 69 6e 74 20 6d 6f 75 6e 74 66 6c 61  g;..int mountfla
0f80: 67 73 5f 6c 69 73 74 5f 6c 65 6e 3b 0a 09 63 68  gs_list_len;..ch
0f90: 61 72 20 2a 73 6f 75 72 63 65 2c 20 2a 74 61 72  ar *source, *tar
0fa0: 67 65 74 2c 20 2a 66 73 74 79 70 65 3b 0a 09 75  get, *fstype;..u
0fb0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 6f 75  nsigned long mou
0fc0: 6e 74 66 6c 61 67 73 20 3d 20 30 3b 0a 09 76 6f  ntflags = 0;..vo
0fd0: 69 64 20 2a 64 61 74 61 20 3d 20 4e 55 4c 4c 3b  id *data = NULL;
0fe0: 0a 09 69 6e 74 20 6d 6f 75 6e 74 5f 72 65 74 2c  ..int mount_ret,
0ff0: 20 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 20 28   tcl_ret;...if (
1000: 6f 62 6a 63 20 3c 20 35 20 7c 7c 20 6f 62 6a 63  objc < 5 || objc
1010: 20 3e 20 36 29 20 7b 0a 09 09 54 63 6c 5f 53 65   > 6) {...Tcl_Se
1020: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
1030: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
1040: 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67  Obj("wrong # arg
1050: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a  s: should be \":
1060: 3a 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c  :system::syscall
1070: 3a 3a 6d 6f 75 6e 74 20 73 6f 75 72 63 65 20 74  ::mount source t
1080: 61 72 67 65 74 20 66 73 74 79 70 65 20 6d 6f 75  arget fstype mou
1090: 6e 74 66 6c 61 67 73 20 3f 64 61 74 61 3f 5c 22  ntflags ?data?\"
10a0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
10b0: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
10c0: 7d 0a 0a 09 73 6f 75 72 63 65 20 3d 20 54 63 6c  }...source = Tcl
10d0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10e0: 31 5d 29 3b 0a 09 74 61 72 67 65 74 20 3d 20 54  1]);..target = T
10f0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
1100: 76 5b 32 5d 29 3b 0a 09 66 73 74 79 70 65 20 3d  v[2]);..fstype =
1110: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
1120: 62 6a 76 5b 33 5d 29 3b 0a 09 6d 6f 75 6e 74 66  bjv[3]);..mountf
1130: 6c 61 67 73 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  lags_obj = objv[
1140: 34 5d 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d  4];...if (objc =
1150: 3d 20 36 29 20 7b 0a 09 09 64 61 74 61 20 3d 20  = 6) {...data = 
1160: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1170: 6a 76 5b 35 5d 29 3b 0a 09 7d 0a 0a 09 74 63 6c  jv[5]);..}...tcl
1180: 5f 72 65 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f  _ret = Tcl_ListO
1190: 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e  bjGetElements(in
11a0: 74 65 72 70 2c 20 6d 6f 75 6e 74 66 6c 61 67 73  terp, mountflags
11b0: 5f 6f 62 6a 2c 20 26 6d 6f 75 6e 74 66 6c 61 67  _obj, &mountflag
11c0: 73 5f 6c 69 73 74 5f 6c 65 6e 2c 20 26 6d 6f 75  s_list_len, &mou
11d0: 6e 74 66 6c 61 67 73 5f 6c 69 73 74 29 3b 0a 09  ntflags_list);..
11e0: 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54  if (tcl_ret != T
11f0: 43 4c 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72  CL_OK) {...retur
1200: 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a  n(tcl_ret);..}..
1210: 09 66 6f 72 20 28 3b 20 6d 6f 75 6e 74 66 6c 61  .for (; mountfla
1220: 67 73 5f 6c 69 73 74 5f 6c 65 6e 20 3e 20 30 3b  gs_list_len > 0;
1230: 20 6d 6f 75 6e 74 66 6c 61 67 73 5f 6c 69 73 74   mountflags_list
1240: 5f 6c 65 6e 2d 2d 2c 6d 6f 75 6e 74 66 6c 61 67  _len--,mountflag
1250: 73 5f 6c 69 73 74 2b 2b 29 20 7b 0a 09 09 6d 6f  s_list++) {...mo
1260: 75 6e 74 66 6c 61 67 20 3d 20 6d 6f 75 6e 74 66  untflag = mountf
1270: 6c 61 67 73 5f 6c 69 73 74 5b 30 5d 3b 0a 0a 09  lags_list[0];...
1280: 09 73 77 69 74 63 68 20 28 74 63 6c 73 79 73 74  .switch (tclsyst
1290: 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70  em_internal_simp
12a0: 6c 65 68 61 73 68 5f 6f 62 6a 28 6d 6f 75 6e 74  lehash_obj(mount
12b0: 66 6c 61 67 29 29 20 7b 0a 23 69 66 64 65 66 20  flag)) {.#ifdef 
12c0: 4d 53 5f 42 49 4e 44 0a 09 09 09 63 61 73 65 20  MS_BIND....case 
12d0: 30 78 38 35 32 36 37 34 34 3a 20 2f 2a 20 42 49  0x8526744: /* BI
12e0: 4e 44 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66  ND */.....mountf
12f0: 6c 61 67 73 20 7c 3d 20 4d 53 5f 42 49 4e 44 3b  lags |= MS_BIND;
1300: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64  .....break;.#end
1310: 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 44 49 52  if.#ifdef MS_DIR
1320: 53 59 4e 43 0a 09 09 09 63 61 73 65 20 30 78 32  SYNC....case 0x2
1330: 61 66 66 34 31 63 33 3a 20 2f 2a 20 44 49 52 53  aff41c3: /* DIRS
1340: 59 4e 43 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74  YNC */.....mount
1350: 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 44 49 52 53  flags |= MS_DIRS
1360: 59 4e 43 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  YNC;.....break;.
1370: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53  #endif.#ifdef MS
1380: 5f 4d 41 4e 44 4c 4f 43 4b 0a 09 09 09 63 61 73  _MANDLOCK....cas
1390: 65 20 30 78 34 31 30 64 62 63 62 3a 20 2f 2a 20  e 0x410dbcb: /* 
13a0: 4d 41 4e 44 4c 4f 43 4b 20 2a 2f 0a 09 09 09 09  MANDLOCK */.....
13b0: 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53  mountflags |= MS
13c0: 5f 4d 41 4e 44 4c 4f 43 4b 3b 0a 09 09 09 09 62  _MANDLOCK;.....b
13d0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 23 69 66  reak;.#endif.#if
13e0: 64 65 66 20 4d 53 5f 4d 4f 56 45 0a 09 09 09 63  def MS_MOVE....c
13f0: 61 73 65 20 30 78 39 62 33 65 62 34 35 3a 20 2f  ase 0x9b3eb45: /
1400: 2a 20 4d 4f 56 45 20 2a 2f 0a 09 09 09 09 6d 6f  * MOVE */.....mo
1410: 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4d  untflags |= MS_M
1420: 4f 56 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  OVE;.....break;.
1430: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53  #endif.#ifdef MS
1440: 5f 4e 4f 41 54 49 4d 45 0a 09 09 09 63 61 73 65  _NOATIME....case
1450: 20 30 78 31 61 30 66 35 38 63 35 3a 20 2f 2a 20   0x1a0f58c5: /* 
1460: 4e 4f 41 54 49 4d 45 20 2a 2f 0a 09 09 09 09 6d  NOATIME */.....m
1470: 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f  ountflags |= MS_
1480: 4e 4f 41 54 49 4d 45 3b 0a 09 09 09 09 62 72 65  NOATIME;.....bre
1490: 61 6b 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  ak;.#endif.#ifde
14a0: 66 20 4d 53 5f 4e 4f 44 45 56 0a 09 09 09 63 61  f MS_NODEV....ca
14b0: 73 65 20 30 78 65 39 66 31 32 30 64 36 3a 20 2f  se 0xe9f120d6: /
14c0: 2a 20 4e 4f 44 45 56 20 2a 2f 0a 09 09 09 09 6d  * NODEV */.....m
14d0: 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f  ountflags |= MS_
14e0: 4e 4f 44 45 56 3b 0a 09 09 09 09 62 72 65 61 6b  NODEV;.....break
14f0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1500: 4d 53 5f 4e 4f 44 49 52 41 54 49 4d 45 0a 09 09  MS_NODIRATIME...
1510: 09 63 61 73 65 20 30 78 64 65 30 38 66 66 34 35  .case 0xde08ff45
1520: 3a 20 2f 2a 20 4e 4f 44 49 52 41 54 49 4d 45 20  : /* NODIRATIME 
1530: 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67  */.....mountflag
1540: 73 20 7c 3d 20 4d 53 5f 4e 4f 44 49 52 41 54 49  s |= MS_NODIRATI
1550: 4d 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23  ME;.....break;.#
1560: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f  endif.#ifdef MS_
1570: 4e 4f 45 58 45 43 0a 09 09 09 63 61 73 65 20 30  NOEXEC....case 0
1580: 78 66 38 62 37 31 38 63 33 3a 20 2f 2a 20 4e 4f  xf8b718c3: /* NO
1590: 45 58 45 43 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e  EXEC */.....moun
15a0: 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4e 4f 45  tflags |= MS_NOE
15b0: 58 45 43 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  XEC;.....break;.
15c0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53  #endif.#ifdef MS
15d0: 5f 4e 4f 53 55 49 44 0a 09 09 09 63 61 73 65 20  _NOSUID....case 
15e0: 30 78 66 61 37 34 35 65 63 34 3a 20 2f 2a 20 4e  0xfa745ec4: /* N
15f0: 4f 53 55 49 44 20 2a 2f 0a 09 09 09 09 6d 6f 75  OSUID */.....mou
1600: 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4e 4f  ntflags |= MS_NO
1610: 53 55 49 44 3b 0a 09 09 09 09 62 72 65 61 6b 3b  SUID;.....break;
1620: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d  .#endif.#ifdef M
1630: 53 5f 52 44 4f 4e 4c 59 0a 09 09 09 63 61 73 65  S_RDONLY....case
1640: 20 30 78 34 39 66 32 65 63 35 39 3a 20 2f 2a 20   0x49f2ec59: /* 
1650: 52 44 4f 4e 4c 59 20 2a 2f 0a 09 09 09 09 6d 6f  RDONLY */.....mo
1660: 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 52  untflags |= MS_R
1670: 44 4f 4e 4c 59 3b 0a 09 09 09 09 62 72 65 61 6b  DONLY;.....break
1680: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1690: 4d 53 5f 52 45 4c 41 54 49 4d 45 0a 09 09 09 63  MS_RELATIME....c
16a0: 61 73 65 20 30 78 34 38 31 39 35 34 63 35 3a 20  ase 0x481954c5: 
16b0: 2f 2a 20 52 45 4c 41 54 49 4d 45 20 2a 2f 0a 09  /* RELATIME */..
16c0: 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d  ...mountflags |=
16d0: 20 4d 53 5f 52 45 4c 41 54 49 4d 45 3b 0a 09 09   MS_RELATIME;...
16e0: 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ..break;.#endif.
16f0: 23 69 66 64 65 66 20 4d 53 5f 52 45 4d 4f 55 4e  #ifdef MS_REMOUN
1700: 54 0a 09 09 09 63 61 73 65 20 30 78 64 39 35 30  T....case 0xd950
1710: 37 31 35 34 3a 20 2f 2a 20 52 45 4d 4f 55 4e 54  7154: /* REMOUNT
1720: 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61   */.....mountfla
1730: 67 73 20 7c 3d 20 4d 53 5f 52 45 4d 4f 55 4e 54  gs |= MS_REMOUNT
1740: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e  ;.....break;.#en
1750: 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 53 49  dif.#ifdef MS_SI
1760: 4c 45 4e 54 0a 09 09 09 63 61 73 65 20 30 78 39  LENT....case 0x9
1770: 39 39 30 32 39 35 34 3a 20 2f 2a 20 53 49 4c 45  9902954: /* SILE
1780: 4e 54 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66  NT */.....mountf
1790: 6c 61 67 73 20 7c 3d 20 4d 53 5f 53 49 4c 45 4e  lags |= MS_SILEN
17a0: 54 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65  T;.....break;.#e
17b0: 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 53  ndif.#ifdef MS_S
17c0: 54 52 49 43 54 41 54 49 4d 45 0a 09 09 09 63 61  TRICTATIME....ca
17d0: 73 65 20 30 78 35 36 32 66 61 30 34 35 3a 20 2f  se 0x562fa045: /
17e0: 2a 20 53 54 52 49 43 54 41 54 49 4d 45 20 2a 2f  * STRICTATIME */
17f0: 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20  .....mountflags 
1800: 7c 3d 20 4d 53 5f 53 54 52 49 43 54 41 54 49 4d  |= MS_STRICTATIM
1810: 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65  E;.....break;.#e
1820: 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 53  ndif.#ifdef MS_S
1830: 59 4e 43 48 52 4f 4e 4f 55 53 0a 09 09 09 63 61  YNCHRONOUS....ca
1840: 73 65 20 30 78 62 66 37 39 39 33 35 33 3a 20 2f  se 0xbf799353: /
1850: 2a 20 53 59 4e 43 48 52 4f 4e 4f 55 53 20 2a 2f  * SYNCHRONOUS */
1860: 0a 09 09 09 63 61 73 65 20 30 78 61 37 36 36 37  ....case 0xa7667
1870: 34 33 3a 20 2f 2a 20 53 59 4e 43 20 2a 2f 0a 09  43: /* SYNC */..
1880: 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d  ...mountflags |=
1890: 20 4d 53 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3b   MS_SYNCHRONOUS;
18a0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64  .....break;.#end
18b0: 69 66 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a 09  if....default:..
18c0: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
18d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
18e0: 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e 6b 6e 6f  ObjPrintf("unkno
18f0: 77 6e 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6d 6f  wn element in mo
1900: 75 6e 74 66 6c 61 67 73 3a 20 5c 22 25 73 5c 22  untflags: \"%s\"
1910: 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
1920: 28 6d 6f 75 6e 74 66 6c 61 67 29 29 29 3b 0a 0a  (mountflag)));..
1930: 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
1940: 52 52 4f 52 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09  RROR);...}..}...
1950: 6d 6f 75 6e 74 5f 72 65 74 20 3d 20 6d 6f 75 6e  mount_ret = moun
1960: 74 28 73 6f 75 72 63 65 2c 20 74 61 72 67 65 74  t(source, target
1970: 2c 20 66 73 74 79 70 65 2c 20 6d 6f 75 6e 74 66  , fstype, mountf
1980: 6c 61 67 73 2c 20 64 61 74 61 29 3b 0a 09 69 66  lags, data);..if
1990: 20 28 6d 6f 75 6e 74 5f 72 65 74 20 21 3d 20 30   (mount_ret != 0
19a0: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
19b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
19c0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
19d0: 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c  strerror(errno),
19e0: 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e   -1));....return
19f0: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
1a00: 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
1a10: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
1a20: 65 77 53 74 72 69 6e 67 4f 62 6a 28 74 61 72 67  ewStringObj(targ
1a30: 65 74 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75  et, -1));...retu
1a40: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73  rn(TCL_OK);.}..s
1a50: 74 61 74 69 63 20 69 6e 74 20 74 63 6c 73 79 73  tatic int tclsys
1a60: 74 65 6d 5f 75 6d 6f 75 6e 74 28 43 6c 69 65 6e  tem_umount(Clien
1a70: 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e  tData cd, Tcl_In
1a80: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
1a90: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
1aa0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b  *CONST objv[]) {
1ab0: 0a 09 54 63 6c 5f 4f 62 6a 20 2a 2a 66 6c 61 67  ..Tcl_Obj **flag
1ac0: 73 2c 20 2a 66 6c 61 67 3b 0a 09 54 63 6c 5f 4f  s, *flag;..Tcl_O
1ad0: 62 6a 20 2a 70 61 74 68 6e 61 6d 65 5f 6f 62 6a  bj *pathname_obj
1ae0: 3b 0a 09 63 68 61 72 20 2a 70 61 74 68 6e 61 6d  ;..char *pathnam
1af0: 65 3b 0a 09 69 6e 74 20 75 6d 6f 75 6e 74 32 5f  e;..int umount2_
1b00: 66 6c 61 67 73 20 3d 20 30 3b 0a 09 69 6e 74 20  flags = 0;..int 
1b10: 66 6c 61 67 73 5f 63 6e 74 3b 0a 09 69 6e 74 20  flags_cnt;..int 
1b20: 63 68 6b 5f 72 65 74 2c 20 74 63 6c 5f 72 65 74  chk_ret, tcl_ret
1b30: 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3c 20 32  ;...if (objc < 2
1b40: 20 7c 7c 20 6f 62 6a 63 20 3e 20 33 29 20 7b 0a   || objc > 3) {.
1b50: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
1b60: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
1b70: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
1b80: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
1b90: 64 20 62 65 20 5c 22 73 79 73 74 65 6d 3a 3a 73  d be \"system::s
1ba0: 79 73 63 61 6c 6c 3a 3a 75 6d 6f 75 6e 74 20 64  yscall::umount d
1bb0: 69 72 20 3f 66 6c 61 67 73 3f 5c 22 22 2c 20 2d  ir ?flags?\"", -
1bc0: 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54  1));....return(T
1bd0: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  CL_ERROR);..}...
1be0: 70 61 74 68 6e 61 6d 65 5f 6f 62 6a 20 3d 20 6f  pathname_obj = o
1bf0: 62 6a 76 5b 31 5d 3b 0a 09 70 61 74 68 6e 61 6d  bjv[1];..pathnam
1c00: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
1c10: 67 28 70 61 74 68 6e 61 6d 65 5f 6f 62 6a 29 3b  g(pathname_obj);
1c20: 0a 0a 09 2f 2a 20 53 65 74 20 61 20 64 65 66 61  .../* Set a defa
1c30: 75 6c 74 20 72 65 74 75 72 6e 20 76 61 6c 75 65  ult return value
1c40: 20 2a 2f 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52   */..Tcl_SetObjR
1c50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 61  esult(interp, pa
1c60: 74 68 6e 61 6d 65 5f 6f 62 6a 29 3b 0a 0a 09 69  thname_obj);...i
1c70: 66 20 28 6f 62 6a 63 20 3d 3d 20 33 29 20 7b 0a  f (objc == 3) {.
1c80: 09 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f  ..tcl_ret = Tcl_
1c90: 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e  ListObjGetElemen
1ca0: 74 73 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  ts(interp, objv[
1cb0: 32 5d 2c 20 26 66 6c 61 67 73 5f 63 6e 74 2c 20  2], &flags_cnt, 
1cc0: 26 66 6c 61 67 73 29 3b 0a 09 09 69 66 20 28 74  &flags);...if (t
1cd0: 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b  cl_ret != TCL_OK
1ce0: 29 20 7b 0a 09 09 09 72 65 74 75 72 6e 28 74 63  ) {....return(tc
1cf0: 6c 5f 72 65 74 29 3b 0a 09 09 7d 0a 0a 09 09 66  l_ret);...}....f
1d00: 6f 72 20 28 3b 20 66 6c 61 67 73 5f 63 6e 74 20  or (; flags_cnt 
1d10: 3e 20 30 3b 20 66 6c 61 67 73 5f 63 6e 74 2d 2d  > 0; flags_cnt--
1d20: 2c 66 6c 61 67 73 2b 2b 29 20 7b 0a 09 09 09 66  ,flags++) {....f
1d30: 6c 61 67 20 3d 20 66 6c 61 67 73 5b 30 5d 3b 0a  lag = flags[0];.
1d40: 0a 09 09 09 73 77 69 74 63 68 20 28 74 63 6c 73  ....switch (tcls
1d50: 79 73 74 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 73  ystem_internal_s
1d60: 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 66 6c  implehash_obj(fl
1d70: 61 67 29 29 20 7b 0a 09 09 09 09 63 61 73 65 20  ag)) {.....case 
1d80: 30 78 36 39 66 34 61 33 63 35 3a 20 2f 2a 20 46  0x69f4a3c5: /* F
1d90: 4f 52 43 45 20 2a 2f 0a 09 09 09 09 09 75 6d 6f  ORCE */......umo
1da0: 75 6e 74 32 5f 66 6c 61 67 73 20 7c 3d 20 4d 4e  unt2_flags |= MN
1db0: 54 5f 46 4f 52 43 45 3b 0a 0a 09 09 09 09 09 62  T_FORCE;.......b
1dc0: 72 65 61 6b 3b 0a 09 09 09 09 63 61 73 65 20 30  reak;.....case 0
1dd0: 78 35 61 39 31 37 33 63 38 3a 20 2f 2a 20 44 45  x5a9173c8: /* DE
1de0: 54 41 43 48 20 2a 2f 0a 09 09 09 09 09 75 6d 6f  TACH */......umo
1df0: 75 6e 74 32 5f 66 6c 61 67 73 20 7c 3d 20 4d 4e  unt2_flags |= MN
1e00: 54 5f 44 45 54 41 43 48 3b 0a 0a 09 09 09 09 09  T_DETACH;.......
1e10: 62 72 65 61 6b 3b 0a 09 09 09 09 63 61 73 65 20  break;.....case 
1e20: 30 78 38 61 31 33 37 66 63 35 3a 20 2f 2a 20 45  0x8a137fc5: /* E
1e30: 58 50 49 52 45 20 2a 2f 0a 09 09 09 09 09 75 6d  XPIRE */......um
1e40: 6f 75 6e 74 32 5f 66 6c 61 67 73 20 7c 3d 20 4d  ount2_flags |= M
1e50: 4e 54 5f 45 58 50 49 52 45 3b 0a 0a 09 09 09 09  NT_EXPIRE;......
1e60: 09 62 72 65 61 6b 3b 0a 09 09 09 09 64 65 66 61  .break;.....defa
1e70: 75 6c 74 3a 0a 09 09 09 09 09 54 63 6c 5f 53 65  ult:......Tcl_Se
1e80: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
1e90: 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66  p, Tcl_ObjPrintf
1ea0: 28 22 75 6e 6b 6e 6f 77 6e 20 66 6c 61 67 20 5c  ("unknown flag \
1eb0: 22 25 73 5c 22 20 73 70 65 63 69 66 69 65 64 22  "%s\" specified"
1ec0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1ed0: 66 6c 61 67 29 29 29 3b 0a 09 0a 09 09 09 09 09  flag)));........
1ee0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
1ef0: 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63  );....}...}....c
1f00: 68 6b 5f 72 65 74 20 3d 20 75 6d 6f 75 6e 74 32  hk_ret = umount2
1f10: 28 70 61 74 68 6e 61 6d 65 2c 20 75 6d 6f 75 6e  (pathname, umoun
1f20: 74 32 5f 66 6c 61 67 73 29 3b 0a 0a 09 09 2f 2a  t2_flags);..../*
1f30: 20 44 6f 20 6e 6f 74 20 72 65 74 75 72 6e 20 61   Do not return a
1f40: 6e 20 65 72 72 6f 72 20 66 6f 72 20 74 68 69 73  n error for this
1f50: 20 63 61 73 65 2c 20 73 69 6e 63 65 20 69 74 20   case, since it 
1f60: 69 73 20 61 70 70 61 72 65 6e 74 6c 79 20 6e 6f  is apparently no
1f70: 74 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 2a 2f  t exceptional */
1f80: 0a 09 09 69 66 20 28 63 68 6b 5f 72 65 74 20 21  ...if (chk_ret !
1f90: 3d 20 30 20 26 26 20 28 75 6d 6f 75 6e 74 32 5f  = 0 && (umount2_
1fa0: 66 6c 61 67 73 20 26 20 4d 4e 54 5f 45 58 50 49  flags & MNT_EXPI
1fb0: 52 45 29 20 3d 3d 20 4d 4e 54 5f 45 58 50 49 52  RE) == MNT_EXPIR
1fc0: 45 20 26 26 20 65 72 72 6e 6f 20 3d 3d 20 45 41  E && errno == EA
1fd0: 47 41 49 4e 29 20 7b 0a 09 09 09 54 63 6c 5f 53  GAIN) {....Tcl_S
1fe0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1ff0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
2000: 67 4f 62 6a 28 22 41 47 41 49 4e 22 2c 20 2d 31  gObj("AGAIN", -1
2010: 29 29 3b 0a 0a 09 09 09 63 68 6b 5f 72 65 74 20  ));.....chk_ret 
2020: 3d 20 30 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65  = 0;...}..} else
2030: 20 7b 0a 09 09 63 68 6b 5f 72 65 74 20 3d 20 75   {...chk_ret = u
2040: 6d 6f 75 6e 74 28 70 61 74 68 6e 61 6d 65 29 3b  mount(pathname);
2050: 0a 09 7d 0a 0a 09 69 66 20 28 63 68 6b 5f 72 65  ..}...if (chk_re
2060: 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f  t != 0) {...Tcl_
2070: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
2080: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
2090: 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65  ngObj(strerror(e
20a0: 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09  rrno), -1));....
20b0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
20c0: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54  );..}...return(T
20d0: 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69  CL_OK);.}..stati
20e0: 63 20 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f  c int tclsystem_
20f0: 73 77 61 70 6f 6e 28 43 6c 69 65 6e 74 44 61 74  swapon(ClientDat
2100: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
2110: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
2120: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
2130: 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 63 68  ST objv[]) {..ch
2140: 61 72 20 2a 70 61 74 68 6e 61 6d 65 3b 0a 09 69  ar *pathname;..i
2150: 6e 74 20 63 68 6b 5f 72 65 74 3b 0a 0a 09 69 66  nt chk_ret;...if
2160: 20 28 6f 62 6a 63 20 21 3d 20 32 29 20 7b 0a 09   (objc != 2) {..
2170: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
2180: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
2190: 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e  wStringObj("wron
21a0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
21b0: 20 62 65 20 5c 22 73 79 73 74 65 6d 3a 3a 73 79   be \"system::sy
21c0: 73 63 61 6c 6c 3a 3a 73 77 61 70 6f 6e 20 70 61  scall::swapon pa
21d0: 74 68 6e 61 6d 65 5c 22 22 2c 20 2d 31 29 29 3b  thname\"", -1));
21e0: 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
21f0: 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 70 61 74 68  RROR);..}...path
2200: 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  name = Tcl_GetSt
2210: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a  ring(objv[1]);..
2220: 09 63 68 6b 5f 72 65 74 20 3d 20 73 77 61 70 6f  .chk_ret = swapo
2230: 6e 28 70 61 74 68 6e 61 6d 65 2c 20 30 29 3b 0a  n(pathname, 0);.
2240: 09 69 66 20 28 63 68 6b 5f 72 65 74 20 21 3d 20  .if (chk_ret != 
2250: 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62  0) {...Tcl_SetOb
2260: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
2270: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
2280: 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29  (strerror(errno)
2290: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
22a0: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
22b0: 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b  ...return(TCL_OK
22c0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
22d0: 20 74 63 6c 73 79 73 74 65 6d 5f 73 77 61 70 6f   tclsystem_swapo
22e0: 66 66 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64  ff(ClientData cd
22f0: 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  , Tcl_Interp *in
2300: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20  terp, int objc, 
2310: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
2320: 62 6a 76 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a  bjv[]) {..char *
2330: 70 61 74 68 6e 61 6d 65 3b 0a 09 69 6e 74 20 63  pathname;..int c
2340: 68 6b 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62  hk_ret;...if (ob
2350: 6a 63 20 21 3d 20 32 29 20 7b 0a 09 09 54 63 6c  jc != 2) {...Tcl
2360: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
2370: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
2380: 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20  ingObj("wrong # 
2390: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
23a0: 5c 22 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c  \"system::syscal
23b0: 6c 3a 3a 73 77 61 70 6f 66 66 20 70 61 74 68 6e  l::swapoff pathn
23c0: 61 6d 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09  ame\"", -1));...
23d0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
23e0: 52 29 3b 0a 09 7d 0a 0a 09 70 61 74 68 6e 61 6d  R);..}...pathnam
23f0: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
2400: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 09 63 68  g(objv[1]);...ch
2410: 6b 5f 72 65 74 20 3d 20 73 77 61 70 6f 66 66 28  k_ret = swapoff(
2420: 70 61 74 68 6e 61 6d 65 29 3b 0a 09 69 66 20 28  pathname);..if (
2430: 63 68 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  chk_ret != 0) {.
2440: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
2450: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
2460: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
2470: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
2480: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
2490: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65  _ERROR);..}...re
24a0: 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a  turn(TCL_OK);.}.
24b0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 73  .static int tcls
24c0: 79 73 74 65 6d 5f 69 6e 73 6d 6f 64 28 43 6c 69  ystem_insmod(Cli
24d0: 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
24e0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
24f0: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
2500: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
2510: 20 7b 0a 09 54 63 6c 5f 43 68 61 6e 6e 65 6c 20   {..Tcl_Channel 
2520: 66 64 3b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 6d 6f  fd;..Tcl_Obj *mo
2530: 64 75 6c 65 5f 66 69 6c 65 6e 61 6d 65 2c 20 2a  dule_filename, *
2540: 6d 6f 64 75 6c 65 5f 64 61 74 61 3b 0a 09 76 6f  module_data;..vo
2550: 69 64 20 2a 6d 6f 64 75 6c 65 5f 64 61 74 61 5f  id *module_data_
2560: 76 61 6c 3b 0a 09 69 6e 74 20 6d 6f 64 75 6c 65  val;..int module
2570: 5f 64 61 74 61 5f 6c 65 6e 3b 0a 09 69 6e 74 20  _data_len;..int 
2580: 72 65 61 64 5f 72 65 74 2c 20 63 68 6b 5f 72 65  read_ret, chk_re
2590: 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3c 20  t;...if (objc < 
25a0: 32 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62  2) {...Tcl_SetOb
25b0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
25c0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
25d0: 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ("wrong # args: 
25e0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 73 79 73 74  should be \"syst
25f0: 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a 3a 69 6e 73  em::syscall::ins
2600: 6d 6f 64 20 66 69 6c 65 6e 61 6d 65 20 3f 61 72  mod filename ?ar
2610: 67 73 20 2e 2e 2e 3f 5c 22 22 2c 20 2d 31 29 29  gs ...?\"", -1))
2620: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
2630: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6d 6f 64  ERROR);..}...mod
2640: 75 6c 65 5f 66 69 6c 65 6e 61 6d 65 20 3d 20 6f  ule_filename = o
2650: 62 6a 76 5b 31 5d 3b 0a 0a 09 66 64 20 3d 20 54  bjv[1];...fd = T
2660: 63 6c 5f 46 53 4f 70 65 6e 46 69 6c 65 43 68 61  cl_FSOpenFileCha
2670: 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20 6d 6f 64  nnel(interp, mod
2680: 75 6c 65 5f 66 69 6c 65 6e 61 6d 65 2c 20 22 72  ule_filename, "r
2690: 22 2c 20 30 36 30 30 29 3b 0a 09 69 66 20 28 66  ", 0600);..if (f
26a0: 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 72  d == NULL) {...r
26b0: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
26c0: 3b 0a 09 7d 0a 0a 09 63 68 6b 5f 72 65 74 20 3d  ;..}...chk_ret =
26d0: 20 54 63 6c 5f 53 65 74 43 68 61 6e 6e 65 6c 4f   Tcl_SetChannelO
26e0: 70 74 69 6f 6e 28 69 6e 74 65 72 70 2c 20 66 64  ption(interp, fd
26f0: 2c 20 22 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 22  , "-translation"
2700: 2c 20 22 62 69 6e 61 72 79 22 29 3b 0a 09 69 66  , "binary");..if
2710: 20 28 63 68 6b 5f 72 65 74 20 21 3d 20 54 43 4c   (chk_ret != TCL
2720: 5f 4f 4b 29 20 7b 0a 09 09 54 63 6c 5f 43 6c 6f  _OK) {...Tcl_Clo
2730: 73 65 28 69 6e 74 65 72 70 2c 20 66 64 29 3b 0a  se(interp, fd);.
2740: 0a 09 09 72 65 74 75 72 6e 28 63 68 6b 5f 72 65  ...return(chk_re
2750: 74 29 3b 0a 09 7d 0a 0a 09 6d 6f 64 75 6c 65 5f  t);..}...module_
2760: 64 61 74 61 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  data = Tcl_NewOb
2770: 6a 28 29 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20  j();...read_ret 
2780: 3d 20 54 63 6c 5f 52 65 61 64 43 68 61 72 73 28  = Tcl_ReadChars(
2790: 66 64 2c 20 6d 6f 64 75 6c 65 5f 64 61 74 61 2c  fd, module_data,
27a0: 20 2d 31 2c 20 30 29 3b 0a 0a 09 54 63 6c 5f 43   -1, 0);...Tcl_C
27b0: 6c 6f 73 65 28 69 6e 74 65 72 70 2c 20 66 64 29  lose(interp, fd)
27c0: 3b 0a 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74  ;...if (read_ret
27d0: 20 3c 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53   <= 0) {...Tcl_S
27e0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
27f0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
2800: 67 4f 62 6a 28 22 72 65 61 64 20 66 61 69 6c 65  gObj("read faile
2810: 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  d", -1));....ret
2820: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
2830: 09 7d 0a 0a 09 6d 6f 64 75 6c 65 5f 64 61 74 61  .}...module_data
2840: 5f 76 61 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79  _val = Tcl_GetBy
2850: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6d  teArrayFromObj(m
2860: 6f 64 75 6c 65 5f 64 61 74 61 2c 20 26 6d 6f 64  odule_data, &mod
2870: 75 6c 65 5f 64 61 74 61 5f 6c 65 6e 29 3b 0a 0a  ule_data_len);..
2880: 09 63 68 6b 5f 72 65 74 20 3d 20 69 6e 69 74 5f  .chk_ret = init_
2890: 6d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 5f 64 61  module(module_da
28a0: 74 61 5f 76 61 6c 2c 20 6d 6f 64 75 6c 65 5f 64  ta_val, module_d
28b0: 61 74 61 5f 6c 65 6e 2c 20 22 22 29 3b 0a 09 69  ata_len, "");..i
28c0: 66 20 28 63 68 6b 5f 72 65 74 20 21 3d 20 30 29  f (chk_ret != 0)
28d0: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
28e0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
28f0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
2900: 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20  trerror(errno), 
2910: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
2920: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
2930: 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b  .return(TCL_OK);
2940: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
2950: 63 6c 73 79 73 74 65 6d 5f 72 6d 6d 6f 64 28 43  clsystem_rmmod(C
2960: 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63  lientData cd, Tc
2970: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2980: 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f  , int objc, Tcl_
2990: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
29a0: 5d 29 20 7b 0a 09 54 63 6c 5f 53 65 74 4f 62 6a  ]) {..Tcl_SetObj
29b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
29c0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
29d0: 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64  "not implemented
29e0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72  ", -1));...retur
29f0: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a  n(TCL_ERROR);.}.
2a00: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 73  .static int tcls
2a10: 79 73 74 65 6d 5f 6c 73 6d 6f 64 28 43 6c 69 65  ystem_lsmod(Clie
2a20: 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49  ntData cd, Tcl_I
2a30: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69  nterp *interp, i
2a40: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a  nt objc, Tcl_Obj
2a50: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20   *CONST objv[]) 
2a60: 7b 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  {..Tcl_SetObjRes
2a70: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
2a80: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e 6f  NewStringObj("no
2a90: 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20  t implemented", 
2aa0: 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54  -1));...return(T
2ab0: 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74  CL_ERROR);.}..st
2ac0: 61 74 69 63 20 69 6e 74 20 74 63 6c 73 79 73 74  atic int tclsyst
2ad0: 65 6d 5f 68 6f 73 74 6e 61 6d 65 28 43 6c 69 65  em_hostname(Clie
2ae0: 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49  ntData cd, Tcl_I
2af0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69  nterp *interp, i
2b00: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a  nt objc, Tcl_Obj
2b10: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20   *CONST objv[]) 
2b20: 7b 0a 09 63 68 61 72 20 68 6f 73 74 6e 61 6d 65  {..char hostname
2b30: 5b 48 4f 53 54 5f 4e 41 4d 45 5f 4d 41 58 20 2b  [HOST_NAME_MAX +
2b40: 20 31 5d 3b 0a 09 69 6e 74 20 63 68 6b 5f 72 65   1];..int chk_re
2b50: 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d 3d  t;...if (objc ==
2b60: 20 31 29 20 7b 0a 09 09 2f 2a 20 4e 6f 20 61 72   1) {.../* No ar
2b70: 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 2c 20 6a  guments given, j
2b80: 75 73 74 20 72 65 74 75 72 6e 20 74 68 65 20 68  ust return the h
2b90: 6f 73 74 6e 61 6d 65 20 2a 2f 0a 09 09 63 68 6b  ostname */...chk
2ba0: 5f 72 65 74 20 3d 20 67 65 74 68 6f 73 74 6e 61  _ret = gethostna
2bb0: 6d 65 28 68 6f 73 74 6e 61 6d 65 2c 20 73 69 7a  me(hostname, siz
2bc0: 65 6f 66 28 68 6f 73 74 6e 61 6d 65 29 29 3b 0a  eof(hostname));.
2bd0: 09 09 69 66 20 28 63 68 6b 5f 72 65 74 20 21 3d  ..if (chk_ret !=
2be0: 20 30 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65 74   0) {....Tcl_Set
2bf0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
2c00: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
2c10: 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e  bj(strerror(errn
2c20: 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 72 65  o), -1));.....re
2c30: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
2c40: 0a 09 09 7d 0a 0a 09 09 68 6f 73 74 6e 61 6d 65  ...}....hostname
2c50: 5b 73 69 7a 65 6f 66 28 68 6f 73 74 6e 61 6d 65  [sizeof(hostname
2c60: 29 20 2d 20 31 5d 20 3d 20 27 5c 30 27 3b 0a 0a  ) - 1] = '\0';..
2c70: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
2c80: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
2c90: 65 77 53 74 72 69 6e 67 4f 62 6a 28 68 6f 73 74  ewStringObj(host
2ca0: 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  name, -1));....r
2cb0: 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09  eturn(TCL_OK);..
2cc0: 7d 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d 3d 20  }...if (objc == 
2cd0: 32 29 20 7b 0a 09 09 2f 2a 20 45 78 61 63 74 6c  2) {.../* Exactl
2ce0: 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 20 67  y one argument g
2cf0: 69 76 65 6e 2c 20 73 65 74 20 74 68 65 20 68 6f  iven, set the ho
2d00: 73 74 6e 61 6d 65 20 2a 2f 0a 09 09 73 74 72 6e  stname */...strn
2d10: 63 70 79 28 68 6f 73 74 6e 61 6d 65 2c 20 54 63  cpy(hostname, Tc
2d20: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
2d30: 5b 31 5d 29 2c 20 73 69 7a 65 6f 66 28 68 6f 73  [1]), sizeof(hos
2d40: 74 6e 61 6d 65 29 29 3b 0a 09 09 68 6f 73 74 6e  tname));...hostn
2d50: 61 6d 65 5b 73 69 7a 65 6f 66 28 68 6f 73 74 6e  ame[sizeof(hostn
2d60: 61 6d 65 29 20 2d 20 31 5d 20 3d 20 27 5c 30 27  ame) - 1] = '\0'
2d70: 3b 0a 0a 09 09 63 68 6b 5f 72 65 74 20 3d 20 73  ;....chk_ret = s
2d80: 65 74 68 6f 73 74 6e 61 6d 65 28 68 6f 73 74 6e  ethostname(hostn
2d90: 61 6d 65 2c 20 73 74 72 6c 65 6e 28 68 6f 73 74  ame, strlen(host
2da0: 6e 61 6d 65 29 29 3b 0a 09 09 69 66 20 28 63 68  name));...if (ch
2db0: 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09  k_ret != 0) {...
2dc0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
2dd0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
2de0: 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72  wStringObj(strer
2df0: 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29  ror(errno), -1))
2e00: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ;.....return(TCL
2e10: 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09  _ERROR);...}....
2e20: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
2e30: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
2e40: 53 74 72 69 6e 67 4f 62 6a 28 68 6f 73 74 6e 61  StringObj(hostna
2e50: 6d 65 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  me, -1));....ret
2e60: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 7d 0a  urn(TCL_OK);..}.
2e70: 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
2e80: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
2e90: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
2ea0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
2eb0: 64 20 62 65 20 5c 22 68 6f 73 74 6e 61 6d 65 20  d be \"hostname 
2ec0: 3f 68 6f 73 74 6e 61 6d 65 3f 5c 22 22 2c 20 2d  ?hostname?\"", -
2ed0: 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43  1));...return(TC
2ee0: 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61  L_ERROR);.}..sta
2ef0: 74 69 63 20 69 6e 74 20 74 63 6c 73 79 73 74 65  tic int tclsyste
2f00: 6d 5f 64 6f 6d 61 69 6e 6e 61 6d 65 28 43 6c 69  m_domainname(Cli
2f10: 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
2f20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
2f30: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
2f40: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
2f50: 20 7b 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65   {..Tcl_SetObjRe
2f60: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
2f70: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e  _NewStringObj("n
2f80: 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c  ot implemented",
2f90: 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28   -1));...return(
2fa0: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73  TCL_ERROR);.}..s
2fb0: 74 61 74 69 63 20 69 6e 74 20 74 63 6c 73 79 73  tatic int tclsys
2fc0: 74 65 6d 5f 63 68 72 6f 6f 74 28 43 6c 69 65 6e  tem_chroot(Clien
2fd0: 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e  tData cd, Tcl_In
2fe0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
2ff0: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
3000: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b  *CONST objv[]) {
3010: 0a 09 63 68 61 72 20 2a 70 61 74 68 6e 61 6d 65  ..char *pathname
3020: 3b 0a 09 69 6e 74 20 63 68 6b 5f 72 65 74 3b 0a  ;..int chk_ret;.
3030: 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29  ..if (objc != 2)
3040: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
3050: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
3060: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
3070: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
3080: 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 73 79 73 74  ould be \"::syst
3090: 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a 63 68 72 6f  em::syscall:chro
30a0: 6f 74 20 70 61 74 68 6e 61 6d 65 5c 22 22 2c 20  ot pathname\"", 
30b0: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
30c0: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
30d0: 09 70 61 74 68 6e 61 6d 65 20 3d 20 54 63 6c 5f  .pathname = Tcl_
30e0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
30f0: 5d 29 3b 0a 0a 09 63 68 6b 5f 72 65 74 20 3d 20  ]);...chk_ret = 
3100: 63 68 72 6f 6f 74 28 70 61 74 68 6e 61 6d 65 29  chroot(pathname)
3110: 3b 0a 09 69 66 20 28 63 68 6b 5f 72 65 74 20 21  ;..if (chk_ret !
3120: 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  = 0) {...Tcl_Set
3130: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
3140: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
3150: 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e  bj(strerror(errn
3160: 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  o), -1));....ret
3170: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
3180: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f  .}...return(TCL_
3190: 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  OK);.}..static i
31a0: 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f 70 69 76  nt tclsystem_piv
31b0: 6f 74 5f 72 6f 6f 74 28 43 6c 69 65 6e 74 44 61  ot_root(ClientDa
31c0: 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72  ta cd, Tcl_Inter
31d0: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f  p *interp, int o
31e0: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  bjc, Tcl_Obj *CO
31f0: 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 63  NST objv[]) {..c
3200: 68 61 72 20 2a 6e 65 77 5f 72 6f 6f 74 2c 20 2a  har *new_root, *
3210: 70 75 74 5f 6f 6c 64 3b 0a 09 69 6e 74 20 63 68  put_old;..int ch
3220: 6b 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a  k_ret;...if (obj
3230: 63 20 21 3d 20 33 29 20 7b 0a 09 09 54 63 6c 5f  c != 3) {...Tcl_
3240: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
3250: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
3260: 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61  ngObj("wrong # a
3270: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
3280: 22 3a 3a 73 79 73 74 65 6d 3a 3a 73 79 73 63 61  "::system::sysca
3290: 6c 6c 3a 3a 70 69 76 6f 74 5f 72 6f 6f 74 20 6e  ll::pivot_root n
32a0: 65 77 5f 72 6f 6f 74 20 70 75 74 5f 6f 6c 64 5c  ew_root put_old\
32b0: 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  "", -1));....ret
32c0: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
32d0: 09 7d 0a 0a 09 6e 65 77 5f 72 6f 6f 74 20 3d 20  .}...new_root = 
32e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
32f0: 6a 76 5b 31 5d 29 3b 0a 09 70 75 74 5f 6f 6c 64  jv[1]);..put_old
3300: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
3310: 28 6f 62 6a 76 5b 32 5d 29 3b 0a 0a 09 63 68 6b  (objv[2]);...chk
3320: 5f 72 65 74 20 3d 20 70 69 76 6f 74 5f 72 6f 6f  _ret = pivot_roo
3330: 74 28 6e 65 77 5f 72 6f 6f 74 2c 20 70 75 74 5f  t(new_root, put_
3340: 6f 6c 64 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72  old);..if (chk_r
3350: 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c  et != 0) {...Tcl
3360: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
3370: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
3380: 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28  ingObj(strerror(
3390: 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09  errno), -1));...
33a0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
33b0: 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28  R);..}...return(
33c0: 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74  TCL_OK);.}..stat
33d0: 69 63 20 69 6e 74 20 74 63 6c 73 79 73 74 65 6d  ic int tclsystem
33e0: 5f 6d 6b 6e 6f 64 28 43 6c 69 65 6e 74 44 61 74  _mknod(ClientDat
33f0: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
3400: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
3410: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
3420: 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63  ST objv[]) {..Tc
3430: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
3440: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
3450: 72 69 6e 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70  ringObj("not imp
3460: 6c 65 6d 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b  lemented", -1));
3470: 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
3480: 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  ROR);.}..static 
3490: 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f 67 65  int tclsystem_ge
34a0: 74 75 69 64 28 43 6c 69 65 6e 74 44 61 74 61 20  tuid(ClientData 
34b0: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
34c0: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
34d0: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
34e0: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f   objv[]) {..Tcl_
34f0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
3500: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
3510: 6e 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65  ngObj("not imple
3520: 6d 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a  mented", -1));..
3530: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
3540: 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e  R);.}..static in
3550: 74 20 74 63 6c 73 79 73 74 65 6d 5f 6b 69 6c 6c  t tclsystem_kill
3560: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
3570: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
3580: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
3590: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
35a0: 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20  v[]) {..Tcl_Obj 
35b0: 2a 73 69 67 6e 61 6c 5f 6f 62 6a 3b 0a 0a 09 54  *signal_obj;...T
35c0: 63 6c 5f 57 69 64 65 49 6e 74 20 70 69 64 5f 77  cl_WideInt pid_w
35d0: 69 64 65 2c 20 73 69 67 5f 77 69 64 65 3b 0a 09  ide, sig_wide;..
35e0: 70 69 64 5f 74 20 70 69 64 3b 0a 09 69 6e 74 20  pid_t pid;..int 
35f0: 73 69 67 3b 0a 09 69 6e 74 20 6b 69 6c 6c 5f 72  sig;..int kill_r
3600: 65 74 2c 20 74 63 6c 5f 72 65 74 3b 0a 0a 09 69  et, tcl_ret;...i
3610: 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a  f (objc != 3) {.
3620: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
3630: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
3640: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
3650: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
3660: 64 20 62 65 20 5c 22 3a 3a 73 79 73 74 65 6d 3a  d be \"::system:
3670: 3a 73 79 73 63 61 6c 6c 3a 3a 6b 69 6c 6c 20 70  :syscall::kill p
3680: 69 64 20 73 69 67 5c 22 22 2c 20 2d 31 29 29 3b  id sig\"", -1));
3690: 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
36a0: 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f  RROR);..}...tcl_
36b0: 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64  ret = Tcl_GetWid
36c0: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  eIntFromObj(inte
36d0: 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 70 69  rp, objv[1], &pi
36e0: 64 5f 77 69 64 65 29 3b 0a 09 69 66 20 28 74 63  d_wide);..if (tc
36f0: 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29  l_ret != TCL_OK)
3700: 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63 6c 5f   {...return(tcl_
3710: 72 65 74 29 3b 0a 09 7d 0a 09 70 69 64 20 3d 20  ret);..}..pid = 
3720: 70 69 64 5f 77 69 64 65 3b 0a 0a 09 73 69 67 6e  pid_wide;...sign
3730: 61 6c 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d  al_obj = objv[2]
3740: 3b 0a 0a 09 74 63 6c 5f 72 65 74 20 3d 20 54 63  ;...tcl_ret = Tc
3750: 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d  l_GetWideIntFrom
3760: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 73 69 67 6e  Obj(interp, sign
3770: 61 6c 5f 6f 62 6a 2c 20 26 73 69 67 5f 77 69 64  al_obj, &sig_wid
3780: 65 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65 74  e);..if (tcl_ret
3790: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09   != TCL_OK) {...
37a0: 73 77 69 74 63 68 20 28 74 63 6c 73 79 73 74 65  switch (tclsyste
37b0: 6d 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c  m_internal_simpl
37c0: 65 68 61 73 68 5f 6f 62 6a 28 73 69 67 6e 61 6c  ehash_obj(signal
37d0: 5f 6f 62 6a 29 29 20 7b 0a 09 09 09 63 61 73 65  _obj)) {....case
37e0: 20 30 78 31 32 32 61 64 30 3a 20 2f 2a 20 48 55   0x122ad0: /* HU
37f0: 50 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39  P */....case 0x9
3800: 38 66 33 36 34 64 30 3a 20 2f 2a 20 53 49 47 48  8f364d0: /* SIGH
3810: 55 50 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20  UP */.....sig = 
3820: 53 49 47 48 55 50 3b 0a 09 09 09 09 62 72 65 61  SIGHUP;.....brea
3830: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 31 32 36  k;....case 0x126
3840: 37 35 34 3a 20 2f 2a 20 49 4e 54 20 2a 2f 0a 09  754: /* INT */..
3850: 09 09 63 61 73 65 20 30 78 39 38 66 33 32 39 35  ..case 0x98f3295
3860: 34 3a 20 2f 2a 20 53 49 47 49 4e 54 20 2a 2f 0a  4: /* SIGINT */.
3870: 09 09 09 09 73 69 67 20 3d 20 53 49 47 49 4e 54  ....sig = SIGINT
3880: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
3890: 63 61 73 65 20 30 78 61 33 35 36 34 64 34 3a 20  case 0xa3564d4: 
38a0: 2f 2a 20 51 55 49 54 20 2a 2f 0a 09 09 09 63 61  /* QUIT */....ca
38b0: 73 65 20 30 78 37 61 39 32 34 32 64 34 3a 20 2f  se 0x7a9242d4: /
38c0: 2a 20 53 49 47 51 55 49 54 20 2a 2f 0a 09 09 09  * SIGQUIT */....
38d0: 09 73 69 67 20 3d 20 53 49 47 51 55 49 54 3b 0a  .sig = SIGQUIT;.
38e0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
38f0: 73 65 20 30 78 31 32 36 36 34 63 3a 20 2f 2a 20  se 0x12664c: /* 
3900: 49 4c 4c 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  ILL */....case 0
3910: 78 39 38 66 33 32 38 34 63 3a 20 2f 2a 20 53 49  x98f3284c: /* SI
3920: 47 49 4c 4c 20 2a 2f 0a 09 09 09 09 73 69 67 20  GILL */.....sig 
3930: 3d 20 53 49 47 49 4c 4c 3b 0a 09 09 09 09 62 72  = SIGILL;.....br
3940: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61  eak;....case 0xa
3950: 39 34 61 30 64 30 3a 20 2f 2a 20 54 52 41 50 20  94a0d0: /* TRAP 
3960: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 61 33  */....case 0x7a3
3970: 33 38 36 64 30 3a 20 2f 2a 20 53 49 47 54 52 41  386d0: /* SIGTRA
3980: 50 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  P */.....sig = S
3990: 49 47 54 52 41 50 3b 0a 09 09 09 09 62 72 65 61  IGTRAP;.....brea
39a0: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 38 33 30  k;....case 0x830
39b0: 61 39 35 34 3a 20 2f 2a 20 41 42 52 54 20 2a 2f  a954: /* ABRT */
39c0: 0a 09 09 09 63 61 73 65 20 30 78 37 38 39 37 38  ....case 0x78978
39d0: 66 35 34 3a 20 2f 2a 20 53 49 47 41 42 52 54 20  f54: /* SIGABRT 
39e0: 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47  */.....sig = SIG
39f0: 41 42 52 54 3b 0a 09 09 09 09 62 72 65 61 6b 3b  ABRT;.....break;
3a00: 0a 09 09 09 63 61 73 65 20 30 78 31 32 36 37 64  ....case 0x1267d
3a10: 34 3a 20 2f 2a 20 49 4f 54 20 2a 2f 0a 09 09 09  4: /* IOT */....
3a20: 63 61 73 65 20 30 78 39 38 66 33 32 39 64 34 3a  case 0x98f329d4:
3a30: 20 2f 2a 20 53 49 47 49 4f 54 20 2a 2f 0a 09 09   /* SIGIOT */...
3a40: 09 09 73 69 67 20 3d 20 53 49 47 49 4f 54 3b 0a  ..sig = SIGIOT;.
3a50: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
3a60: 73 65 20 30 78 31 30 61 61 64 33 3a 20 2f 2a 20  se 0x10aad3: /* 
3a70: 42 55 53 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  BUS */....case 0
3a80: 78 39 38 66 31 65 34 64 33 3a 20 2f 2a 20 53 49  x98f1e4d3: /* SI
3a90: 47 42 55 53 20 2a 2f 0a 09 09 09 09 73 69 67 20  GBUS */.....sig 
3aa0: 3d 20 53 49 47 42 55 53 3b 0a 09 09 09 09 62 72  = SIGBUS;.....br
3ab0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 31  eak;....case 0x1
3ac0: 31 61 38 34 35 3a 20 2f 2a 20 46 50 45 20 2a 2f  1a845: /* FPE */
3ad0: 0a 09 09 09 63 61 73 65 20 30 78 39 38 66 30 65  ....case 0x98f0e
3ae0: 36 34 35 3a 20 2f 2a 20 53 49 47 46 50 45 20 2a  645: /* SIGFPE *
3af0: 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 46  /.....sig = SIGF
3b00: 50 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  PE;.....break;..
3b10: 09 09 63 61 73 65 20 30 78 39 37 32 36 36 34 63  ..case 0x972664c
3b20: 3a 20 2f 2a 20 4b 49 4c 4c 20 2a 2f 0a 09 09 09  : /* KILL */....
3b30: 63 61 73 65 20 30 78 37 39 64 35 34 30 34 63 3a  case 0x79d5404c:
3b40: 20 2f 2a 20 53 49 47 4b 49 4c 4c 20 2a 2f 0a 09   /* SIGKILL */..
3b50: 09 09 09 73 69 67 20 3d 20 53 49 47 4b 49 4c 4c  ...sig = SIGKILL
3b60: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
3b70: 63 61 73 65 20 30 78 61 62 34 65 39 33 31 3a 20  case 0xab4e931: 
3b80: 2f 2a 20 55 53 52 31 20 2a 2f 0a 09 09 09 63 61  /* USR1 */....ca
3b90: 73 65 20 30 78 37 61 31 33 63 66 33 31 3a 20 2f  se 0x7a13cf31: /
3ba0: 2a 20 53 49 47 55 53 52 31 20 2a 2f 0a 09 09 09  * SIGUSR1 */....
3bb0: 09 73 69 67 20 3d 20 53 49 47 55 53 52 31 3b 0a  .sig = SIGUSR1;.
3bc0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
3bd0: 73 65 20 30 78 61 37 31 36 33 64 36 3a 20 2f 2a  se 0xa7163d6: /*
3be0: 20 53 45 47 56 20 2a 2f 0a 09 09 09 63 61 73 65   SEGV */....case
3bf0: 20 30 78 37 61 64 36 34 35 64 36 3a 20 2f 2a 20   0x7ad645d6: /* 
3c00: 53 49 47 53 45 47 56 20 2a 2f 0a 09 09 09 09 73  SIGSEGV */.....s
3c10: 69 67 20 3d 20 53 49 47 53 45 47 56 3b 0a 09 09  ig = SIGSEGV;...
3c20: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
3c30: 20 30 78 61 62 34 65 39 33 32 3a 20 2f 2a 20 55   0xab4e932: /* U
3c40: 53 52 32 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  SR2 */....case 0
3c50: 78 37 61 31 33 63 66 33 32 3a 20 2f 2a 20 53 49  x7a13cf32: /* SI
3c60: 47 55 53 52 32 20 2a 2f 0a 09 09 09 09 73 69 67  GUSR2 */.....sig
3c70: 20 3d 20 53 49 47 55 53 52 32 3b 0a 09 09 09 09   = SIGUSR2;.....
3c80: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
3c90: 78 61 31 32 36 38 34 35 3a 20 2f 2a 20 50 49 50  xa126845: /* PIP
3ca0: 45 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37  E */....case 0x7
3cb0: 61 62 35 34 65 34 35 3a 20 2f 2a 20 53 49 47 50  ab54e45: /* SIGP
3cc0: 49 50 45 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d  IPE */.....sig =
3cd0: 20 53 49 47 50 49 50 45 3b 0a 09 09 09 09 62 72   SIGPIPE;.....br
3ce0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 38  eak;....case 0x8
3cf0: 33 33 32 39 34 64 3a 20 2f 2a 20 41 4c 52 4d 20  33294d: /* ALRM 
3d00: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 38 39  */....case 0x789
3d10: 34 30 66 34 64 3a 20 2f 2a 20 53 49 47 41 4c 52  40f4d: /* SIGALR
3d20: 4d 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  M */.....sig = S
3d30: 49 47 41 4c 52 4d 3b 0a 09 09 09 09 62 72 65 61  IGALRM;.....brea
3d40: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61 39 31  k;....case 0xa91
3d50: 36 39 34 64 3a 20 2f 2a 20 54 45 52 4d 20 2a 2f  694d: /* TERM */
3d60: 0a 09 09 09 63 61 73 65 20 30 78 37 61 33 36 34  ....case 0x7a364
3d70: 66 34 64 3a 20 2f 2a 20 53 49 47 54 45 52 4d 20  f4d: /* SIGTERM 
3d80: 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47  */.....sig = SIG
3d90: 54 45 52 4d 3b 0a 09 09 09 09 62 72 65 61 6b 3b  TERM;.....break;
3da0: 0a 09 09 09 63 61 73 65 20 30 78 34 39 37 30 65  ....case 0x4970e
3db0: 38 64 34 3a 20 2f 2a 20 53 54 4b 46 4c 54 20 2a  8d4: /* STKFLT *
3dc0: 2f 0a 09 09 09 63 61 73 65 20 30 78 38 30 66 65  /....case 0x80fe
3dd0: 66 63 35 34 3a 20 2f 2a 20 53 49 47 53 54 4b 46  fc54: /* SIGSTKF
3de0: 4c 54 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20  LT */.....sig = 
3df0: 53 49 47 53 54 4b 46 4c 54 3b 0a 09 09 09 09 62  SIGSTKFLT;.....b
3e00: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78  reak;....case 0x
3e10: 38 37 32 32 36 34 34 3a 20 2f 2a 20 43 48 4c 44  8722644: /* CHLD
3e20: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 38   */....case 0x78
3e30: 64 35 30 30 34 34 3a 20 2f 2a 20 53 49 47 43 48  d50044: /* SIGCH
3e40: 4c 44 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20  LD */.....sig = 
3e50: 53 49 47 43 48 4c 44 3b 0a 09 09 09 09 62 72 65  SIGCHLD;.....bre
3e60: 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 38 37  ak;....case 0x87
3e70: 33 65 37 35 34 3a 20 2f 2a 20 43 4f 4e 54 20 2a  3e754: /* CONT *
3e80: 2f 0a 09 09 09 63 61 73 65 20 30 78 37 38 64 34  /....case 0x78d4
3e90: 63 31 35 34 3a 20 2f 2a 20 53 49 47 43 4f 4e 54  c154: /* SIGCONT
3ea0: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
3eb0: 47 43 4f 4e 54 3b 0a 09 09 09 09 62 72 65 61 6b  GCONT;.....break
3ec0: 3b 0a 09 09 09 63 61 73 65 20 30 78 61 37 35 32  ;....case 0xa752
3ed0: 37 64 30 3a 20 2f 2a 20 53 54 4f 50 20 2a 2f 0a  7d0: /* STOP */.
3ee0: 09 09 09 63 61 73 65 20 30 78 37 61 64 32 30 31  ...case 0x7ad201
3ef0: 64 30 3a 20 2f 2a 20 53 49 47 53 54 4f 50 20 2a  d0: /* SIGSTOP *
3f00: 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 53  /.....sig = SIGS
3f10: 54 4f 50 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  TOP;.....break;.
3f20: 09 09 09 63 61 73 65 20 30 78 61 39 34 65 61 35  ...case 0xa94ea5
3f30: 30 3a 20 2f 2a 20 54 53 54 50 20 2a 2f 0a 09 09  0: /* TSTP */...
3f40: 09 63 61 73 65 20 30 78 37 61 33 33 63 63 35 30  .case 0x7a33cc50
3f50: 3a 20 2f 2a 20 53 49 47 54 53 54 50 20 2a 2f 0a  : /* SIGTSTP */.
3f60: 09 09 09 09 73 69 67 20 3d 20 53 49 47 54 53 54  ....sig = SIGTST
3f70: 50 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  P;.....break;...
3f80: 09 63 61 73 65 20 30 78 61 39 35 32 34 63 65 3a  .case 0xa9524ce:
3f90: 20 2f 2a 20 54 54 49 4e 20 2a 2f 0a 09 09 09 63   /* TTIN */....c
3fa0: 61 73 65 20 30 78 37 61 33 32 30 32 63 65 3a 20  ase 0x7a3202ce: 
3fb0: 2f 2a 20 53 49 47 54 54 49 4e 20 2a 2f 0a 09 09  /* SIGTTIN */...
3fc0: 09 09 73 69 67 20 3d 20 53 49 47 54 54 49 4e 3b  ..sig = SIGTTIN;
3fd0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
3fe0: 61 73 65 20 30 78 61 39 35 32 37 64 35 3a 20 2f  ase 0xa9527d5: /
3ff0: 2a 20 54 54 4f 55 20 2a 2f 0a 09 09 09 63 61 73  * TTOU */....cas
4000: 65 20 30 78 37 61 33 32 30 31 64 35 3a 20 2f 2a  e 0x7a3201d5: /*
4010: 20 53 49 47 54 54 4f 55 20 2a 2f 0a 09 09 09 09   SIGTTOU */.....
4020: 73 69 67 20 3d 20 53 49 47 54 54 4f 55 3b 0a 09  sig = SIGTTOU;..
4030: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
4040: 65 20 30 78 31 35 36 39 34 37 3a 20 2f 2a 20 55  e 0x156947: /* U
4050: 52 47 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78  RG */....case 0x
4060: 39 38 66 34 32 37 34 37 3a 20 2f 2a 20 53 49 47  98f42747: /* SIG
4070: 55 52 47 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d  URG */.....sig =
4080: 20 53 49 47 55 52 47 3b 0a 09 09 09 09 62 72 65   SIGURG;.....bre
4090: 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 62 31  ak;....case 0xb1
40a0: 30 65 38 35 35 3a 20 2f 2a 20 58 43 50 55 20 2a  0e855: /* XCPU *
40b0: 2f 0a 09 09 09 63 61 73 65 20 30 78 37 62 62 37  /....case 0x7bb7
40c0: 63 65 35 35 3a 20 2f 2a 20 53 49 47 58 43 50 55  ce55: /* SIGXCPU
40d0: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
40e0: 47 58 43 50 55 3b 0a 09 09 09 09 62 72 65 61 6b  GXCPU;.....break
40f0: 3b 0a 09 09 09 63 61 73 65 20 30 78 62 31 31 61  ;....case 0xb11a
4100: 39 64 61 3a 20 2f 2a 20 58 46 53 5a 20 2a 2f 0a  9da: /* XFSZ */.
4110: 09 09 09 63 61 73 65 20 30 78 37 62 62 36 38 66  ...case 0x7bb68f
4120: 64 61 3a 20 2f 2a 20 53 49 47 58 46 53 5a 20 2a  da: /* SIGXFSZ *
4130: 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 58  /.....sig = SIGX
4140: 46 53 5a 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  FSZ;.....break;.
4150: 09 09 09 63 61 73 65 20 30 78 34 38 33 32 37 33  ...case 0x483273
4160: 63 64 3a 20 2f 2a 20 56 54 41 4c 52 4d 20 2a 2f  cd: /* VTALRM */
4170: 0a 09 09 09 63 61 73 65 20 30 78 38 31 62 63 36  ....case 0x81bc6
4180: 37 34 64 3a 20 2f 2a 20 53 49 47 56 54 41 4c 52  74d: /* SIGVTALR
4190: 4d 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  M */.....sig = S
41a0: 49 47 56 54 41 4c 52 4d 3b 0a 09 09 09 09 62 72  IGVTALRM;.....br
41b0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61  eak;....case 0xa
41c0: 31 34 61 37 63 36 3a 20 2f 2a 20 50 52 4f 46 20  14a7c6: /* PROF 
41d0: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 61 62  */....case 0x7ab
41e0: 33 38 31 63 36 3a 20 2f 2a 20 53 49 47 50 52 4f  381c6: /* SIGPRO
41f0: 46 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  F */.....sig = S
4200: 49 47 50 52 4f 46 3b 0a 09 09 09 09 62 72 65 61  IGPROF;.....brea
4210: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 37 39 33  k;....case 0x793
4220: 33 61 33 34 38 3a 20 2f 2a 20 57 49 4e 43 48 20  3a348: /* WINCH 
4230: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 32 61 61  */....case 0x2aa
4240: 30 62 66 34 38 3a 20 2f 2a 20 53 49 47 57 49 4e  0bf48: /* SIGWIN
4250: 43 48 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20  CH */.....sig = 
4260: 53 49 47 57 49 4e 43 48 3b 0a 09 09 09 09 62 72  SIGWINCH;.....br
4270: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 32  eak;....case 0x2
4280: 34 63 66 3a 20 2f 2a 20 49 4f 20 2a 2f 0a 09 09  4cf: /* IO */...
4290: 09 63 61 73 65 20 30 78 33 39 33 31 65 36 34 66  .case 0x3931e64f
42a0: 3a 20 2f 2a 20 53 49 47 49 4f 20 2a 2f 0a 09 09  : /* SIGIO */...
42b0: 09 09 73 69 67 20 3d 20 53 49 47 49 4f 3b 0a 09  ..sig = SIGIO;..
42c0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
42d0: 65 20 30 78 31 34 32 62 64 32 3a 20 2f 2a 20 50  e 0x142bd2: /* P
42e0: 57 52 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78  WR */....case 0x
42f0: 39 38 66 35 36 35 64 32 3a 20 2f 2a 20 53 49 47  98f565d2: /* SIG
4300: 50 57 52 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d  PWR */.....sig =
4310: 20 53 49 47 50 57 52 3b 0a 09 09 09 09 62 72 65   SIGPWR;.....bre
4320: 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 31 34  ak;....case 0x14
4330: 65 63 64 33 3a 20 2f 2a 20 53 59 53 20 2a 2f 0a  ecd3: /* SYS */.
4340: 09 09 09 63 61 73 65 20 30 78 39 38 66 35 61 32  ...case 0x98f5a2
4350: 64 33 3a 20 2f 2a 20 53 49 47 53 59 53 20 2a 2f  d3: /* SIGSYS */
4360: 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 53 59  .....sig = SIGSY
4370: 53 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  S;.....break;...
4380: 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 54 63  .default:.....Tc
4390: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
43a0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72  nterp, Tcl_ObjPr
43b0: 69 6e 74 66 28 22 75 6e 6b 6e 6f 77 6e 20 73 69  intf("unknown si
43c0: 67 6e 61 6c 20 5c 22 25 73 5c 22 22 2c 20 54 63  gnal \"%s\"", Tc
43d0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 73 69 67 6e  l_GetString(sign
43e0: 61 6c 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 09  al_obj)));......
43f0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
4400: 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b  );...}..} else {
4410: 0a 09 09 73 69 67 20 3d 20 73 69 67 5f 77 69 64  ...sig = sig_wid
4420: 65 3b 0a 09 7d 0a 0a 09 6b 69 6c 6c 5f 72 65 74  e;..}...kill_ret
4430: 20 3d 20 6b 69 6c 6c 28 70 69 64 2c 20 73 69 67   = kill(pid, sig
4440: 29 3b 0a 09 69 66 20 28 6b 69 6c 6c 5f 72 65 74  );..if (kill_ret
4450: 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53   != 0) {...Tcl_S
4460: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
4470: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
4480: 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72  gObj(strerror(er
4490: 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  rno), -1));....r
44a0: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
44b0: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43  ;..}...return(TC
44c0: 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  L_OK);.}..static
44d0: 20 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f 70   int tclsystem_p
44e0: 73 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  s(ClientData cd,
44f0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4500: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
4510: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
4520: 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 53 65 74  jv[]) {..Tcl_Set
4530: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
4540: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
4550: 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e  bj("not implemen
4560: 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65  ted", -1));...re
4570: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
4580: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
4590: 63 6c 73 79 73 74 65 6d 5f 65 78 65 63 76 65 28  clsystem_execve(
45a0: 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
45b0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
45c0: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
45d0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
45e0: 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a 2a 61 72  []) {..char **ar
45f0: 67 76 20 3d 20 4e 55 4c 4c 3b 0a 09 63 68 61 72  gv = NULL;..char
4600: 20 2a 66 69 6c 65 3b 0a 09 69 6e 74 20 69 64 78   *file;..int idx
4610: 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3c 20 32  ;...if (objc < 2
4620: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
4630: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
4640: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
4650: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
4660: 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 73 79 73  hould be \"::sys
4670: 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a 3a 65 78  tem::syscall::ex
4680: 65 63 76 65 20 66 69 6c 65 20 3f 61 72 67 73 20  ecve file ?args 
4690: 2e 2e 2e 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a  ...?\"", -1));..
46a0: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
46b0: 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 46 69 6e  OR);..}.../* Fin
46c0: 64 20 65 78 65 63 75 74 61 62 6c 65 20 2a 2f 0a  d executable */.
46d0: 09 66 69 6c 65 20 3d 20 54 63 6c 5f 47 65 74 53  .file = Tcl_GetS
46e0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a  tring(objv[1]);.
46f0: 0a 09 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 72  ../* Generate ar
4700: 67 75 6d 65 6e 74 20 61 72 72 61 79 20 2a 2f 0a  gument array */.
4710: 09 61 72 67 76 20 3d 20 6d 61 6c 6c 6f 63 28 73  .argv = malloc(s
4720: 69 7a 65 6f 66 28 2a 61 72 67 76 29 20 2a 20 28  izeof(*argv) * (
4730: 6f 62 6a 63 20 2d 20 31 29 29 3b 0a 0a 09 66 6f  objc - 1));...fo
4740: 72 20 28 69 64 78 20 3d 20 32 3b 20 69 64 78 20  r (idx = 2; idx 
4750: 3c 20 6f 62 6a 63 3b 20 69 64 78 2b 2b 29 20 7b  < objc; idx++) {
4760: 0a 09 09 61 72 67 76 5b 69 64 78 20 2d 20 32 5d  ...argv[idx - 2]
4770: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
4780: 28 6f 62 6a 76 5b 69 64 78 5d 29 3b 0a 09 7d 0a  (objv[idx]);..}.
4790: 09 61 72 67 76 5b 6f 62 6a 63 20 2d 20 32 5d 20  .argv[objc - 2] 
47a0: 3d 20 4e 55 4c 4c 3b 0a 0a 09 2f 2a 20 50 61 73  = NULL;.../* Pas
47b0: 73 20 65 78 65 63 75 74 69 6f 6e 20 74 6f 20 6e  s execution to n
47c0: 65 77 20 66 69 6c 65 20 2a 2f 0a 09 65 78 65 63  ew file */..exec
47d0: 76 65 28 66 69 6c 65 2c 20 61 72 67 76 2c 20 65  ve(file, argv, e
47e0: 6e 76 69 72 6f 6e 29 3b 0a 0a 09 2f 2a 20 49 66  nviron);.../* If
47f0: 20 74 68 65 20 6e 65 77 20 69 6d 61 67 65 20 63   the new image c
4800: 6f 75 6c 64 20 6e 6f 74 20 74 61 6b 65 20 6f 76  ould not take ov
4810: 65 72 2c 20 73 6f 6d 65 74 68 69 6e 67 20 77 65  er, something we
4820: 6e 74 20 77 72 6f 6e 67 20 2d 2d 20 72 65 70 6f  nt wrong -- repo
4830: 72 74 20 65 72 72 6f 72 20 2a 2f 0a 09 54 63 6c  rt error */..Tcl
4840: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
4850: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
4860: 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28  ingObj(strerror(
4870: 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09  errno), -1));...
4880: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
4890: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
48a0: 20 74 63 6c 73 79 73 74 65 6d 5f 6c 6f 73 65 74   tclsystem_loset
48b0: 75 70 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64  up(ClientData cd
48c0: 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  , Tcl_Interp *in
48d0: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20  terp, int objc, 
48e0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
48f0: 62 6a 76 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a  bjv[]) {..char *
4900: 66 69 6c 65 2c 20 2a 6c 6f 6f 70 64 65 76 3b 0a  file, *loopdev;.
4910: 09 69 6e 74 20 63 68 6b 5f 72 65 74 3b 0a 09 69  .int chk_ret;..i
4920: 6e 74 20 6c 6f 6f 70 66 64 2c 20 66 69 6c 65 66  nt loopfd, filef
4930: 64 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d  d;...if (objc !=
4940: 20 33 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f   3) {...Tcl_SetO
4950: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
4960: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
4970: 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  j("wrong # args:
4980: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 73   should be \"::s
4990: 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a 3a  ystem::syscall::
49a0: 6c 6f 73 65 74 75 70 20 6c 6f 6f 70 64 65 76 20  losetup loopdev 
49b0: 66 69 6c 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a  file\"", -1));..
49c0: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
49d0: 4f 52 29 3b 0a 09 7d 0a 0a 09 6c 6f 6f 70 64 65  OR);..}...loopde
49e0: 76 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  v = Tcl_GetStrin
49f0: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 09 66 69 6c  g(objv[1]);..fil
4a00: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
4a10: 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 0a 09 6c 6f  g(objv[2]);...lo
4a20: 6f 70 66 64 20 3d 20 6f 70 65 6e 28 6c 6f 6f 70  opfd = open(loop
4a30: 64 65 76 2c 20 4f 5f 52 44 4f 4e 4c 59 29 3b 0a  dev, O_RDONLY);.
4a40: 09 69 66 20 28 6c 6f 6f 70 66 64 20 3c 20 30 29  .if (loopfd < 0)
4a50: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
4a60: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
4a70: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
4a80: 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20  trerror(errno), 
4a90: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
4aa0: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
4ab0: 09 69 66 20 28 66 69 6c 65 5b 30 5d 20 21 3d 20  .if (file[0] != 
4ac0: 27 5c 30 27 29 20 7b 0a 09 09 66 69 6c 65 66 64  '\0') {...filefd
4ad0: 20 3d 20 6f 70 65 6e 28 66 69 6c 65 2c 20 4f 5f   = open(file, O_
4ae0: 52 44 4f 4e 4c 59 29 3b 0a 09 09 69 66 20 28 66  RDONLY);...if (f
4af0: 69 6c 65 66 64 20 3c 20 30 29 20 7b 0a 09 09 09  ilefd < 0) {....
4b00: 63 6c 6f 73 65 28 6c 6f 6f 70 66 64 29 3b 0a 0a  close(loopfd);..
4b10: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
4b20: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
4b30: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72  NewStringObj(str
4b40: 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31  error(errno), -1
4b50: 29 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54  ));.....return(T
4b60: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a  CL_ERROR);...}..
4b70: 09 09 63 68 6b 5f 72 65 74 20 3d 20 69 6f 63 74  ..chk_ret = ioct
4b80: 6c 28 6c 6f 6f 70 66 64 2c 20 4c 4f 4f 50 5f 53  l(loopfd, LOOP_S
4b90: 45 54 5f 46 44 2c 20 66 69 6c 65 66 64 29 3b 0a  ET_FD, filefd);.
4ba0: 0a 09 09 63 6c 6f 73 65 28 66 69 6c 65 66 64 29  ...close(filefd)
4bb0: 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 68  ;..} else {...ch
4bc0: 6b 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 6c 6f  k_ret = ioctl(lo
4bd0: 6f 70 66 64 2c 20 4c 4f 4f 50 5f 43 4c 52 5f 46  opfd, LOOP_CLR_F
4be0: 44 2c 20 30 29 3b 0a 09 7d 0a 0a 09 63 6c 6f 73  D, 0);..}...clos
4bf0: 65 28 6c 6f 6f 70 66 64 29 3b 0a 0a 09 69 66 20  e(loopfd);...if 
4c00: 28 63 68 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b  (chk_ret != 0) {
4c10: 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
4c20: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
4c30: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72  NewStringObj(str
4c40: 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31  error(errno), -1
4c50: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  ));....return(TC
4c60: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72  L_ERROR);..}...r
4c70: 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d  eturn(TCL_OK);.}
4c80: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 63  ..static void tc
4c90: 6c 73 79 73 74 65 6d 5f 70 72 69 76 61 74 65 5f  lsystem_private_
4ca0: 61 70 70 65 6e 64 5f 73 6f 63 6b 61 64 64 72 5f  append_sockaddr_
4cb0: 74 6f 5f 74 63 6c 6f 62 6a 28 54 63 6c 5f 49 6e  to_tclobj(Tcl_In
4cc0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 63  terp *interp, Tc
4cd0: 6c 5f 4f 62 6a 20 2a 6c 69 73 74 2c 20 63 68 61  l_Obj *list, cha
4ce0: 72 20 2a 68 65 61 64 65 72 2c 20 73 74 72 75 63  r *header, struc
4cf0: 74 20 73 6f 63 6b 61 64 64 72 20 2a 61 64 64 72  t sockaddr *addr
4d00: 29 20 7b 0a 09 63 68 61 72 20 61 64 64 72 5f 62  ) {..char addr_b
4d10: 75 66 5b 49 4e 45 54 36 5f 41 44 44 52 53 54 52  uf[INET6_ADDRSTR
4d20: 4c 45 4e 20 2b 20 49 4e 45 54 5f 41 44 44 52 53  LEN + INET_ADDRS
4d30: 54 52 4c 45 4e 20 2b 20 31 5d 2c 20 2a 63 68 6b  TRLEN + 1], *chk
4d40: 5f 69 6e 70 3b 0a 0a 09 73 77 69 74 63 68 20 28  _inp;...switch (
4d50: 61 64 64 72 2d 3e 73 61 5f 66 61 6d 69 6c 79 29  addr->sa_family)
4d60: 20 7b 0a 09 09 63 61 73 65 20 41 46 5f 49 4e 45   {...case AF_INE
4d70: 54 3a 20 2f 2a 20 49 50 76 34 20 2a 2f 0a 09 09  T: /* IPv4 */...
4d80: 63 61 73 65 20 41 46 5f 49 4e 45 54 36 3a 20 2f  case AF_INET6: /
4d90: 2a 20 49 50 76 36 20 2a 2f 0a 09 09 09 73 77 69  * IPv6 */....swi
4da0: 74 63 68 20 28 61 64 64 72 2d 3e 73 61 5f 66 61  tch (addr->sa_fa
4db0: 6d 69 6c 79 29 20 7b 0a 09 09 09 09 63 61 73 65  mily) {.....case
4dc0: 20 41 46 5f 49 4e 45 54 3a 20 2f 2a 20 49 50 76   AF_INET: /* IPv
4dd0: 34 20 2a 2f 0a 09 09 09 09 09 63 68 6b 5f 69 6e  4 */......chk_in
4de0: 70 20 3d 20 28 63 68 61 72 20 2a 29 20 69 6e 65  p = (char *) ine
4df0: 74 5f 6e 74 6f 70 28 61 64 64 72 2d 3e 73 61 5f  t_ntop(addr->sa_
4e00: 66 61 6d 69 6c 79 2c 20 26 28 28 73 74 72 75 63  family, &((struc
4e10: 74 20 73 6f 63 6b 61 64 64 72 5f 69 6e 20 2a 29  t sockaddr_in *)
4e20: 20 61 64 64 72 29 2d 3e 73 69 6e 5f 61 64 64 72   addr)->sin_addr
4e30: 2c 20 61 64 64 72 5f 62 75 66 2c 20 73 69 7a 65  , addr_buf, size
4e40: 6f 66 28 61 64 64 72 5f 62 75 66 29 29 3b 0a 09  of(addr_buf));..
4e50: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 63  ....break;.....c
4e60: 61 73 65 20 41 46 5f 49 4e 45 54 36 3a 20 2f 2a  ase AF_INET6: /*
4e70: 20 49 50 76 36 20 2a 2f 0a 09 09 09 09 09 63 68   IPv6 */......ch
4e80: 6b 5f 69 6e 70 20 3d 20 28 63 68 61 72 20 2a 29  k_inp = (char *)
4e90: 20 69 6e 65 74 5f 6e 74 6f 70 28 61 64 64 72 2d   inet_ntop(addr-
4ea0: 3e 73 61 5f 66 61 6d 69 6c 79 2c 20 26 28 28 73  >sa_family, &((s
4eb0: 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 5f 69  truct sockaddr_i
4ec0: 6e 36 20 2a 29 20 61 64 64 72 29 2d 3e 73 69 6e  n6 *) addr)->sin
4ed0: 36 5f 61 64 64 72 2c 20 61 64 64 72 5f 62 75 66  6_addr, addr_buf
4ee0: 2c 20 73 69 7a 65 6f 66 28 61 64 64 72 5f 62 75  , sizeof(addr_bu
4ef0: 66 29 29 3b 0a 09 09 09 09 09 62 72 65 61 6b 3b  f));......break;
4f00: 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 63 68  ....}.....if (ch
4f10: 6b 5f 69 6e 70 20 3d 3d 20 4e 55 4c 4c 29 20 7b  k_inp == NULL) {
4f20: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d  .....break;....}
4f30: 0a 0a 09 09 09 69 66 20 28 68 65 61 64 65 72 29  .....if (header)
4f40: 20 7b 0a 09 09 09 09 54 63 6c 5f 4c 69 73 74 4f   {.....Tcl_ListO
4f50: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
4f60: 69 6e 74 65 72 70 2c 20 6c 69 73 74 2c 20 54 63  interp, list, Tc
4f70: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 68  l_NewStringObj(h
4f80: 65 61 64 65 72 2c 20 2d 31 29 29 3b 0a 09 09 09  eader, -1));....
4f90: 7d 0a 0a 09 09 09 54 63 6c 5f 4c 69 73 74 4f 62  }.....Tcl_ListOb
4fa0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
4fb0: 6e 74 65 72 70 2c 20 6c 69 73 74 2c 20 54 63 6c  nterp, list, Tcl
4fc0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 61 64  _NewStringObj(ad
4fd0: 64 72 5f 62 75 66 2c 20 2d 31 29 29 3b 0a 0a 09  dr_buf, -1));...
4fe0: 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 72 65  ..break;..}...re
4ff0: 74 75 72 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  turn;.}..static 
5000: 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f 70 72  int tclsystem_pr
5010: 69 76 61 74 65 5f 67 65 74 5f 73 6f 63 6b 61 64  ivate_get_sockad
5020: 64 72 5f 66 72 6f 6d 5f 6f 62 6a 28 54 63 6c 5f  dr_from_obj(Tcl_
5030: 4f 62 6a 20 2a 76 61 6c 75 65 2c 20 76 6f 69 64  Obj *value, void
5040: 20 2a 74 61 72 67 65 74 29 20 7b 0a 09 73 74 72   *target) {..str
5050: 75 63 74 20 73 6f 63 6b 61 64 64 72 5f 69 6e 20  uct sockaddr_in 
5060: 6c 6f 63 61 6c 5f 76 34 3b 0a 09 73 74 72 75 63  local_v4;..struc
5070: 74 20 73 6f 63 6b 61 64 64 72 5f 69 6e 36 20 6c  t sockaddr_in6 l
5080: 6f 63 61 6c 5f 76 36 3b 0a 09 63 6f 6e 73 74 20  ocal_v6;..const 
5090: 63 68 61 72 20 2a 61 64 64 72 5f 73 74 72 3b 0a  char *addr_str;.
50a0: 09 69 6e 74 20 69 6e 65 74 70 74 6f 6e 5f 72 65  .int inetpton_re
50b0: 74 3b 0a 0a 09 61 64 64 72 5f 73 74 72 20 3d 20  t;...addr_str = 
50c0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 76 61  Tcl_GetString(va
50d0: 6c 75 65 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 26  lue);...memset(&
50e0: 6c 6f 63 61 6c 5f 76 34 2c 20 30 2c 20 73 69 7a  local_v4, 0, siz
50f0: 65 6f 66 28 6c 6f 63 61 6c 5f 76 34 29 29 3b 0a  eof(local_v4));.
5100: 09 69 6e 65 74 70 74 6f 6e 5f 72 65 74 20 3d 20  .inetpton_ret = 
5110: 69 6e 65 74 5f 70 74 6f 6e 28 41 46 5f 49 4e 45  inet_pton(AF_INE
5120: 54 2c 20 61 64 64 72 5f 73 74 72 2c 20 26 6c 6f  T, addr_str, &lo
5130: 63 61 6c 5f 76 34 2e 73 69 6e 5f 61 64 64 72 29  cal_v4.sin_addr)
5140: 3b 0a 09 69 66 20 28 69 6e 65 74 70 74 6f 6e 5f  ;..if (inetpton_
5150: 72 65 74 20 3d 3d 20 31 29 20 7b 0a 09 09 6c 6f  ret == 1) {...lo
5160: 63 61 6c 5f 76 34 2e 73 69 6e 5f 66 61 6d 69 6c  cal_v4.sin_famil
5170: 79 20 3d 20 41 46 5f 49 4e 45 54 3b 0a 0a 09 09  y = AF_INET;....
5180: 6d 65 6d 63 70 79 28 74 61 72 67 65 74 2c 20 26  memcpy(target, &
5190: 6c 6f 63 61 6c 5f 76 34 2c 20 73 69 7a 65 6f 66  local_v4, sizeof
51a0: 28 6c 6f 63 61 6c 5f 76 34 29 29 3b 0a 0a 09 09  (local_v4));....
51b0: 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09  return(0);..}...
51c0: 6d 65 6d 73 65 74 28 26 6c 6f 63 61 6c 5f 76 36  memset(&local_v6
51d0: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6c 6f 63 61  , 0, sizeof(loca
51e0: 6c 5f 76 36 29 29 3b 0a 09 69 6e 65 74 70 74 6f  l_v6));..inetpto
51f0: 6e 5f 72 65 74 20 3d 20 69 6e 65 74 5f 70 74 6f  n_ret = inet_pto
5200: 6e 28 41 46 5f 49 4e 45 54 36 2c 20 61 64 64 72  n(AF_INET6, addr
5210: 5f 73 74 72 2c 20 26 6c 6f 63 61 6c 5f 76 36 2e  _str, &local_v6.
5220: 73 69 6e 36 5f 61 64 64 72 29 3b 0a 09 69 66 20  sin6_addr);..if 
5230: 28 69 6e 65 74 70 74 6f 6e 5f 72 65 74 20 3d 3d  (inetpton_ret ==
5240: 20 31 29 20 7b 0a 09 09 6c 6f 63 61 6c 5f 76 36   1) {...local_v6
5250: 2e 73 69 6e 36 5f 66 61 6d 69 6c 79 20 3d 20 41  .sin6_family = A
5260: 46 5f 49 4e 45 54 36 3b 0a 0a 09 09 6d 65 6d 63  F_INET6;....memc
5270: 70 79 28 74 61 72 67 65 74 2c 20 26 6c 6f 63 61  py(target, &loca
5280: 6c 5f 76 36 2c 20 73 69 7a 65 6f 66 28 6c 6f 63  l_v6, sizeof(loc
5290: 61 6c 5f 76 36 29 29 3b 0a 0a 09 09 72 65 74 75  al_v6));....retu
52a0: 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09 72 65 74 75  rn(0);..}...retu
52b0: 72 6e 28 2d 31 29 3b 0a 7d 0a 0a 73 74 61 74 69  rn(-1);.}..stati
52c0: 63 20 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f  c int tclsystem_
52d0: 69 66 63 6f 6e 66 69 67 5f 6c 69 73 74 28 43 6c  ifconfig_list(Cl
52e0: 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c  ientData cd, Tcl
52f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
5300: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f   int objc, Tcl_O
5310: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
5320: 2c 20 69 6e 74 20 73 6f 63 6b 29 20 7b 0a 09 54  , int sock) {..T
5330: 63 6c 5f 4f 62 6a 20 2a 74 63 6c 5f 69 66 61 63  cl_Obj *tcl_ifac
5340: 65 5f 6c 69 73 74 3b 0a 09 73 74 72 75 63 74 20  e_list;..struct 
5350: 69 66 63 6f 6e 66 20 69 66 61 63 65 73 5f 63 66  ifconf ifaces_cf
5360: 67 3b 0a 09 73 74 72 75 63 74 20 69 66 72 65 71  g;..struct ifreq
5370: 20 2a 69 66 61 63 65 5f 72 65 71 20 3d 20 4e 55   *iface_req = NU
5380: 4c 4c 3b 0a 09 69 6e 74 20 69 66 61 63 65 5f 72  LL;..int iface_r
5390: 65 71 5f 63 6e 74 20 3d 20 32 32 34 2c 20 69 66  eq_cnt = 224, if
53a0: 61 63 65 5f 72 65 71 5f 6c 65 6e 3b 0a 09 69 6e  ace_req_len;..in
53b0: 74 20 69 64 78 2c 20 69 66 61 63 65 5f 63 6e 74  t idx, iface_cnt
53c0: 3b 0a 09 69 6e 74 20 69 6f 63 74 6c 5f 72 65 74  ;..int ioctl_ret
53d0: 2c 20 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 61  , tcl_ret;...ifa
53e0: 63 65 5f 72 65 71 5f 6c 65 6e 20 3d 20 69 66 61  ce_req_len = ifa
53f0: 63 65 5f 72 65 71 5f 63 6e 74 20 2a 20 73 69 7a  ce_req_cnt * siz
5400: 65 6f 66 28 2a 69 66 61 63 65 5f 72 65 71 29 3b  eof(*iface_req);
5410: 0a 09 69 66 61 63 65 5f 72 65 71 20 3d 20 6d 61  ..iface_req = ma
5420: 6c 6c 6f 63 28 69 66 61 63 65 5f 72 65 71 5f 6c  lloc(iface_req_l
5430: 65 6e 29 3b 0a 09 69 66 20 28 69 66 61 63 65 5f  en);..if (iface_
5440: 72 65 71 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  req == NULL) {..
5450: 09 2f 2a 20 52 65 70 6f 72 74 20 66 61 69 6c 75  ./* Report failu
5460: 72 65 20 2a 2f 0a 09 09 54 63 6c 5f 53 65 74 4f  re */...Tcl_SetO
5470: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
5480: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
5490: 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20 61 6c 6c  j("unable to all
54a0: 6f 63 61 74 65 20 6d 65 6d 6f 72 79 22 2c 20 2d  ocate memory", -
54b0: 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54  1));....return(T
54c0: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  CL_ERROR);..}...
54d0: 69 66 61 63 65 73 5f 63 66 67 2e 69 66 63 5f 72  ifaces_cfg.ifc_r
54e0: 65 71 20 3d 20 69 66 61 63 65 5f 72 65 71 3b 0a  eq = iface_req;.
54f0: 09 69 66 61 63 65 73 5f 63 66 67 2e 69 66 63 5f  .ifaces_cfg.ifc_
5500: 6c 65 6e 20 3d 20 69 66 61 63 65 5f 72 65 71 5f  len = iface_req_
5510: 6c 65 6e 3b 0a 09 69 6f 63 74 6c 5f 72 65 74 20  len;..ioctl_ret 
5520: 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 53 49  = ioctl(sock, SI
5530: 4f 43 47 49 46 43 4f 4e 46 2c 20 26 69 66 61 63  OCGIFCONF, &ifac
5540: 65 73 5f 63 66 67 29 3b 0a 09 69 66 20 28 69 6f  es_cfg);..if (io
5550: 63 74 6c 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  ctl_ret != 0) {.
5560: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
5570: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
5580: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6f 63  ewStringObj("ioc
5590: 74 6c 20 66 61 69 6c 65 64 22 2c 20 2d 31 29 29  tl failed", -1))
55a0: 3b 0a 0a 09 09 66 72 65 65 28 69 66 61 63 65 5f  ;....free(iface_
55b0: 72 65 71 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  req);....return(
55c0: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
55d0: 09 69 66 61 63 65 5f 63 6e 74 20 3d 20 69 66 61  .iface_cnt = ifa
55e0: 63 65 73 5f 63 66 67 2e 69 66 63 5f 6c 65 6e 20  ces_cfg.ifc_len 
55f0: 2f 20 73 69 7a 65 6f 66 28 2a 69 66 61 63 65 5f  / sizeof(*iface_
5600: 72 65 71 29 3b 0a 0a 09 74 63 6c 5f 69 66 61 63  req);...tcl_ifac
5610: 65 5f 6c 69 73 74 20 3d 20 54 63 6c 5f 4e 65 77  e_list = Tcl_New
5620: 4f 62 6a 28 29 3b 0a 0a 09 66 6f 72 20 28 69 64  Obj();...for (id
5630: 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 69 66 61  x = 0; idx < ifa
5640: 63 65 5f 63 6e 74 3b 20 69 64 78 2b 2b 29 20 7b  ce_cnt; idx++) {
5650: 0a 09 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c  ...tcl_ret = Tcl
5660: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
5670: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 74 63  ement(interp, tc
5680: 6c 5f 69 66 61 63 65 5f 6c 69 73 74 2c 20 54 63  l_iface_list, Tc
5690: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 69  l_NewStringObj(i
56a0: 66 61 63 65 5f 72 65 71 5b 69 64 78 5d 2e 69 66  face_req[idx].if
56b0: 72 5f 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 09 09  r_name, -1));...
56c0: 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54  if (tcl_ret != T
56d0: 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 54 63 6c 5f  CL_OK) {....Tcl_
56e0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
56f0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
5700: 6e 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f  ngObj("unable to
5710: 20 61 70 70 65 6e 64 20 74 6f 20 6c 69 73 74 22   append to list"
5720: 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 66 72 65 65  , -1));.....free
5730: 28 69 66 61 63 65 5f 72 65 71 29 3b 0a 0a 09 09  (iface_req);....
5740: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
5750: 52 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 66 72 65  R);...}..}...fre
5760: 65 28 69 66 61 63 65 5f 72 65 71 29 3b 0a 0a 09  e(iface_req);...
5770: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
5780: 28 69 6e 74 65 72 70 2c 20 74 63 6c 5f 69 66 61  (interp, tcl_ifa
5790: 63 65 5f 6c 69 73 74 29 3b 0a 0a 09 72 65 74 75  ce_list);...retu
57a0: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73  rn(TCL_OK);.}..s
57b0: 74 61 74 69 63 20 69 6e 74 20 74 63 6c 73 79 73  tatic int tclsys
57c0: 74 65 6d 5f 69 66 63 6f 6e 66 69 67 5f 69 6e 66  tem_ifconfig_inf
57d0: 6f 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  o(ClientData cd,
57e0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
57f0: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
5800: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
5810: 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 2c 20  jv[], int sock, 
5820: 69 6e 74 20 73 6f 63 6b 5f 76 34 2c 20 69 6e 74  int sock_v4, int
5830: 20 73 6f 63 6b 5f 76 36 29 20 7b 0a 09 54 63 6c   sock_v6) {..Tcl
5840: 5f 4f 62 6a 20 2a 72 65 74 6c 69 73 74 2c 20 2a  _Obj *retlist, *
5850: 66 6c 61 67 73 3b 0a 09 73 74 72 75 63 74 20 69  flags;..struct i
5860: 66 72 65 71 20 69 66 61 63 65 5f 72 65 71 3b 0a  freq iface_req;.
5870: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  .unsigned char *
5880: 61 64 64 72 5f 64 61 74 61 3b 0a 09 63 6f 6e 73  addr_data;..cons
5890: 74 20 63 68 61 72 20 2a 6c 69 6e 6b 5f 65 6e 63  t char *link_enc
58a0: 61 70 3b 0a 09 63 6f 6e 73 74 20 63 68 61 72 20  ap;..const char 
58b0: 2a 69 66 61 63 65 3b 0a 09 69 6e 74 20 66 6c 61  *iface;..int fla
58c0: 67 73 5f 62 69 74 6d 61 73 6b 2c 20 66 6c 61 67  gs_bitmask, flag
58d0: 5f 62 72 6f 61 64 63 61 73 74 20 3d 20 30 2c 20  _broadcast = 0, 
58e0: 66 6c 61 67 5f 70 6f 69 6e 74 6f 70 6f 69 6e 74  flag_pointopoint
58f0: 20 3d 20 30 3b 0a 09 69 6e 74 20 69 6f 63 74 6c   = 0;..int ioctl
5900: 5f 72 65 74 3b 0a 0a 09 72 65 74 6c 69 73 74 20  _ret;...retlist 
5910: 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a  = Tcl_NewObj();.
5920: 0a 09 69 66 61 63 65 20 3d 20 54 63 6c 5f 47 65  ..iface = Tcl_Ge
5930: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
5940: 3b 0a 0a 09 69 66 20 28 28 73 74 72 6c 65 6e 28  ;...if ((strlen(
5950: 69 66 61 63 65 29 20 2b 20 31 29 20 3e 3d 20 49  iface) + 1) >= I
5960: 46 4e 41 4d 53 49 5a 29 20 7b 0a 09 09 54 63 6c  FNAMSIZ) {...Tcl
5970: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
5980: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
5990: 69 6e 67 4f 62 6a 28 22 69 6e 74 65 72 66 61 63  ingObj("interfac
59a0: 65 20 6e 61 6d 65 20 74 6f 6f 20 6c 6f 6e 67 22  e name too long"
59b0: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
59c0: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
59d0: 0a 0a 09 73 74 72 63 70 79 28 69 66 61 63 65 5f  ...strcpy(iface_
59e0: 72 65 71 2e 69 66 72 5f 6e 61 6d 65 2c 20 69 66  req.ifr_name, if
59f0: 61 63 65 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 41  ace);.../*.. * A
5a00: 6c 6c 20 69 6e 74 65 72 66 61 63 65 73 20 73 68  ll interfaces sh
5a10: 6f 75 6c 64 20 68 61 76 65 20 66 6c 61 67 73 2c  ould have flags,
5a20: 20 73 6f 20 75 73 65 20 69 74 20 61 73 20 61 20   so use it as a 
5a30: 63 68 65 63 6b 20 66 6f 72 20 69 6e 74 65 72 66  check for interf
5a40: 61 63 65 0a 09 20 2a 20 65 78 69 73 74 61 6e 63  ace.. * existanc
5a50: 65 0a 09 20 2a 2f 0a 09 69 6f 63 74 6c 5f 72 65  e.. */..ioctl_re
5a60: 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20  t = ioctl(sock, 
5a70: 53 49 4f 43 47 49 46 46 4c 41 47 53 2c 20 26 69  SIOCGIFFLAGS, &i
5a80: 66 61 63 65 5f 72 65 71 29 3b 0a 09 69 66 20 28  face_req);..if (
5a90: 69 6f 63 74 6c 5f 72 65 74 20 21 3d 20 30 29 20  ioctl_ret != 0) 
5aa0: 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  {...Tcl_SetObjRe
5ab0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
5ac0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69  _NewStringObj("i
5ad0: 6e 76 61 6c 69 64 20 69 6e 74 65 72 66 61 63 65  nvalid interface
5ae0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
5af0: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
5b00: 7d 0a 0a 09 2f 2a 20 43 72 65 61 74 65 20 6c 69  }.../* Create li
5b10: 73 74 20 6f 66 20 66 6c 61 67 73 20 2a 2f 0a 09  st of flags */..
5b20: 66 6c 61 67 73 20 3d 20 54 63 6c 5f 4e 65 77 4f  flags = Tcl_NewO
5b30: 62 6a 28 29 3b 0a 09 66 6c 61 67 73 5f 62 69 74  bj();..flags_bit
5b40: 6d 61 73 6b 20 3d 20 69 66 61 63 65 5f 72 65 71  mask = iface_req
5b50: 2e 69 66 72 5f 66 6c 61 67 73 3b 0a 0a 09 69 66  .ifr_flags;...if
5b60: 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b   ((flags_bitmask
5b70: 20 26 20 49 46 46 5f 55 50 29 20 3d 3d 20 49 46   & IFF_UP) == IF
5b80: 46 5f 55 50 29 20 7b 0a 09 09 54 63 6c 5f 4c 69  F_UP) {...Tcl_Li
5b90: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
5ba0: 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73  nt(interp, flags
5bb0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
5bc0: 62 6a 28 22 55 50 22 2c 20 2d 31 29 29 3b 0a 09  bj("UP", -1));..
5bd0: 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69  }..if ((flags_bi
5be0: 74 6d 61 73 6b 20 26 20 49 46 46 5f 42 52 4f 41  tmask & IFF_BROA
5bf0: 44 43 41 53 54 29 20 3d 3d 20 49 46 46 5f 42 52  DCAST) == IFF_BR
5c00: 4f 41 44 43 41 53 54 29 20 7b 0a 09 09 66 6c 61  OADCAST) {...fla
5c10: 67 5f 62 72 6f 61 64 63 61 73 74 20 3d 20 31 3b  g_broadcast = 1;
5c20: 0a 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ....Tcl_ListObjA
5c30: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
5c40: 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f  erp, flags, Tcl_
5c50: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 42 52  NewStringObj("BR
5c60: 4f 41 44 43 41 53 54 22 2c 20 2d 31 29 29 3b 0a  OADCAST", -1));.
5c70: 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62  .}..if ((flags_b
5c80: 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 50 4f 49  itmask & IFF_POI
5c90: 4e 54 4f 50 4f 49 4e 54 29 20 3d 3d 20 49 46 46  NTOPOINT) == IFF
5ca0: 5f 50 4f 49 4e 54 4f 50 4f 49 4e 54 29 20 7b 0a  _POINTOPOINT) {.
5cb0: 09 09 66 6c 61 67 5f 70 6f 69 6e 74 6f 70 6f 69  ..flag_pointopoi
5cc0: 6e 74 20 3d 20 31 3b 0a 0a 09 09 54 63 6c 5f 4c  nt = 1;....Tcl_L
5cd0: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
5ce0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67  ent(interp, flag
5cf0: 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  s, Tcl_NewString
5d00: 4f 62 6a 28 22 50 4f 49 4e 54 4f 50 4f 49 4e 54  Obj("POINTOPOINT
5d10: 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20  ", -1));..}..if 
5d20: 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20  ((flags_bitmask 
5d30: 26 20 49 46 46 5f 44 45 42 55 47 29 20 3d 3d 20  & IFF_DEBUG) == 
5d40: 49 46 46 5f 44 45 42 55 47 29 20 7b 0a 09 09 54  IFF_DEBUG) {...T
5d50: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
5d60: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
5d70: 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74  flags, Tcl_NewSt
5d80: 72 69 6e 67 4f 62 6a 28 22 44 45 42 55 47 22 2c  ringObj("DEBUG",
5d90: 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28   -1));..}..if ((
5da0: 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20  flags_bitmask & 
5db0: 49 46 46 5f 4c 4f 4f 50 42 41 43 4b 29 20 3d 3d  IFF_LOOPBACK) ==
5dc0: 20 49 46 46 5f 4c 4f 4f 50 42 41 43 4b 29 20 7b   IFF_LOOPBACK) {
5dd0: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
5de0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
5df0: 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e  rp, flags, Tcl_N
5e00: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 4c 4f 4f  ewStringObj("LOO
5e10: 50 42 41 43 4b 22 2c 20 2d 31 29 29 3b 0a 09 7d  PBACK", -1));..}
5e20: 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74  ..if ((flags_bit
5e30: 6d 61 73 6b 20 26 20 49 46 46 5f 4e 4f 54 52 41  mask & IFF_NOTRA
5e40: 49 4c 45 52 53 29 20 3d 3d 20 49 46 46 5f 4e 4f  ILERS) == IFF_NO
5e50: 54 52 41 49 4c 45 52 53 29 20 7b 0a 09 09 54 63  TRAILERS) {...Tc
5e60: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
5e70: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66  lement(interp, f
5e80: 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72  lags, Tcl_NewStr
5e90: 69 6e 67 4f 62 6a 28 22 4e 4f 54 52 41 49 4c 45  ingObj("NOTRAILE
5ea0: 52 53 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69  RS", -1));..}..i
5eb0: 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73  f ((flags_bitmas
5ec0: 6b 20 26 20 49 46 46 5f 52 55 4e 4e 49 4e 47 29  k & IFF_RUNNING)
5ed0: 20 3d 3d 20 49 46 46 5f 52 55 4e 4e 49 4e 47 29   == IFF_RUNNING)
5ee0: 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a   {...Tcl_ListObj
5ef0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
5f00: 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c  terp, flags, Tcl
5f10: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 52  _NewStringObj("R
5f20: 55 4e 4e 49 4e 47 22 2c 20 2d 31 29 29 3b 0a 09  UNNING", -1));..
5f30: 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69  }..if ((flags_bi
5f40: 74 6d 61 73 6b 20 26 20 49 46 46 5f 4e 4f 41 52  tmask & IFF_NOAR
5f50: 50 29 20 3d 3d 20 49 46 46 5f 4e 4f 41 52 50 29  P) == IFF_NOARP)
5f60: 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a   {...Tcl_ListObj
5f70: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
5f80: 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c  terp, flags, Tcl
5f90: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 4e  _NewStringObj("N
5fa0: 4f 41 52 50 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a  OARP", -1));..}.
5fb0: 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d  .if ((flags_bitm
5fc0: 61 73 6b 20 26 20 49 46 46 5f 50 52 4f 4d 49 53  ask & IFF_PROMIS
5fd0: 43 29 20 3d 3d 20 49 46 46 5f 50 52 4f 4d 49 53  C) == IFF_PROMIS
5fe0: 43 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f  C) {...Tcl_ListO
5ff0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
6000: 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54  interp, flags, T
6010: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
6020: 22 50 52 4f 4d 49 53 43 22 2c 20 2d 31 29 29 3b  "PROMISC", -1));
6030: 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f  ..}..if ((flags_
6040: 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 41 4c  bitmask & IFF_AL
6050: 4c 4d 55 4c 54 49 29 20 3d 3d 20 49 46 46 5f 41  LMULTI) == IFF_A
6060: 4c 4c 4d 55 4c 54 49 29 20 7b 0a 09 09 54 63 6c  LLMULTI) {...Tcl
6070: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
6080: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c  ement(interp, fl
6090: 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ags, Tcl_NewStri
60a0: 6e 67 4f 62 6a 28 22 41 4c 4c 4d 55 4c 54 49 22  ngObj("ALLMULTI"
60b0: 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28  , -1));..}..if (
60c0: 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26  (flags_bitmask &
60d0: 20 49 46 46 5f 4d 41 53 54 45 52 29 20 3d 3d 20   IFF_MASTER) == 
60e0: 49 46 46 5f 4d 41 53 54 45 52 29 20 7b 0a 09 09  IFF_MASTER) {...
60f0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
6100: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
6110: 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53   flags, Tcl_NewS
6120: 74 72 69 6e 67 4f 62 6a 28 22 4d 41 53 54 45 52  tringObj("MASTER
6130: 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20  ", -1));..}..if 
6140: 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20  ((flags_bitmask 
6150: 26 20 49 46 46 5f 53 4c 41 56 45 29 20 3d 3d 20  & IFF_SLAVE) == 
6160: 49 46 46 5f 53 4c 41 56 45 29 20 7b 0a 09 09 54  IFF_SLAVE) {...T
6170: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
6180: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
6190: 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74  flags, Tcl_NewSt
61a0: 72 69 6e 67 4f 62 6a 28 22 53 4c 41 56 45 22 2c  ringObj("SLAVE",
61b0: 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28   -1));..}..if ((
61c0: 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20  flags_bitmask & 
61d0: 49 46 46 5f 4d 55 4c 54 49 43 41 53 54 29 20 3d  IFF_MULTICAST) =
61e0: 3d 20 49 46 46 5f 4d 55 4c 54 49 43 41 53 54 29  = IFF_MULTICAST)
61f0: 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a   {...Tcl_ListObj
6200: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
6210: 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c  terp, flags, Tcl
6220: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 4d  _NewStringObj("M
6230: 55 4c 54 49 43 41 53 54 22 2c 20 2d 31 29 29 3b  ULTICAST", -1));
6240: 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f  ..}..if ((flags_
6250: 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 50 4f  bitmask & IFF_PO
6260: 52 54 53 45 4c 29 20 3d 3d 20 49 46 46 5f 50 4f  RTSEL) == IFF_PO
6270: 52 54 53 45 4c 29 20 7b 0a 09 09 54 63 6c 5f 4c  RTSEL) {...Tcl_L
6280: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
6290: 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67  ent(interp, flag
62a0: 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  s, Tcl_NewString
62b0: 4f 62 6a 28 22 50 4f 52 54 53 45 4c 22 2c 20 2d  Obj("PORTSEL", -
62c0: 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c  1));..}..if ((fl
62d0: 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46  ags_bitmask & IF
62e0: 46 5f 41 55 54 4f 4d 45 44 49 41 29 20 3d 3d 20  F_AUTOMEDIA) == 
62f0: 49 46 46 5f 41 55 54 4f 4d 45 44 49 41 29 20 7b  IFF_AUTOMEDIA) {
6300: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
6310: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
6320: 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e  rp, flags, Tcl_N
6330: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 41 55 54  ewStringObj("AUT
6340: 4f 4d 45 44 49 41 22 2c 20 2d 31 29 29 3b 0a 09  OMEDIA", -1));..
6350: 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69  }..if ((flags_bi
6360: 74 6d 61 73 6b 20 26 20 49 46 46 5f 44 59 4e 41  tmask & IFF_DYNA
6370: 4d 49 43 29 20 3d 3d 20 49 46 46 5f 44 59 4e 41  MIC) == IFF_DYNA
6380: 4d 49 43 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73  MIC) {...Tcl_Lis
6390: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
63a0: 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c  t(interp, flags,
63b0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
63c0: 6a 28 22 44 59 4e 41 4d 49 43 22 2c 20 2d 31 29  j("DYNAMIC", -1)
63d0: 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67  );..}..if ((flag
63e0: 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f  s_bitmask & IFF_
63f0: 4c 4f 57 45 52 5f 55 50 29 20 3d 3d 20 49 46 46  LOWER_UP) == IFF
6400: 5f 4c 4f 57 45 52 5f 55 50 29 20 7b 0a 09 09 54  _LOWER_UP) {...T
6410: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
6420: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
6430: 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74  flags, Tcl_NewSt
6440: 72 69 6e 67 4f 62 6a 28 22 4c 4f 57 45 52 5f 55  ringObj("LOWER_U
6450: 50 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66  P", -1));..}..if
6460: 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b   ((flags_bitmask
6470: 20 26 20 49 46 46 5f 44 4f 52 4d 41 4e 54 29 20   & IFF_DORMANT) 
6480: 3d 3d 20 49 46 46 5f 44 4f 52 4d 41 4e 54 29 20  == IFF_DORMANT) 
6490: 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  {...Tcl_ListObjA
64a0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
64b0: 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f  erp, flags, Tcl_
64c0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 44 4f  NewStringObj("DO
64d0: 52 4d 41 4e 54 22 2c 20 2d 31 29 29 3b 0a 09 7d  RMANT", -1));..}
64e0: 0a 23 69 66 64 65 66 20 49 46 46 5f 45 43 48 4f  .#ifdef IFF_ECHO
64f0: 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74  ..if ((flags_bit
6500: 6d 61 73 6b 20 26 20 49 46 46 5f 45 43 48 4f 29  mask & IFF_ECHO)
6510: 20 3d 3d 20 49 46 46 5f 45 43 48 4f 29 20 7b 0a   == IFF_ECHO) {.
6520: 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70  ..Tcl_ListObjApp
6530: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
6540: 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65  p, flags, Tcl_Ne
6550: 77 53 74 72 69 6e 67 4f 62 6a 28 22 45 43 48 4f  wStringObj("ECHO
6560: 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 23 65 6e 64  ", -1));..}.#end
6570: 69 66 0a 0a 09 2f 2a 20 41 64 64 20 61 72 72 61  if.../* Add arra
6580: 79 2d 63 6f 6d 70 6c 69 61 6e 74 2f 64 69 63 74  y-compliant/dict
6590: 20 65 6e 74 72 79 20 74 6f 20 74 68 65 20 72 65   entry to the re
65a0: 74 75 72 6e 20 6c 69 73 74 20 2a 2f 0a 09 54 63  turn list */..Tc
65b0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
65c0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72  lement(interp, r
65d0: 65 74 6c 69 73 74 2c 20 54 63 6c 5f 4e 65 77 53  etlist, Tcl_NewS
65e0: 74 72 69 6e 67 4f 62 6a 28 22 66 6c 61 67 73 22  tringObj("flags"
65f0: 2c 20 2d 31 29 29 3b 0a 09 54 63 6c 5f 4c 69 73  , -1));..Tcl_Lis
6600: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
6610: 74 28 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73  t(interp, retlis
6620: 74 2c 20 66 6c 61 67 73 29 3b 0a 0a 09 2f 2a 20  t, flags);.../* 
6630: 46 65 74 63 68 20 6f 74 68 65 72 20 61 74 74 72  Fetch other attr
6640: 69 62 75 74 65 73 20 66 72 6f 6d 20 74 68 65 20  ibutes from the 
6650: 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 09 69 6f  interface */..io
6660: 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28  ctl_ret = ioctl(
6670: 73 6f 63 6b 2c 20 53 49 4f 43 47 49 46 48 57 41  sock, SIOCGIFHWA
6680: 44 44 52 2c 20 26 69 66 61 63 65 5f 72 65 71 29  DDR, &iface_req)
6690: 3b 0a 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74  ;..if (ioctl_ret
66a0: 20 3d 3d 20 30 29 20 7b 0a 09 09 6c 69 6e 6b 5f   == 0) {...link_
66b0: 65 6e 63 61 70 20 3d 20 22 75 6e 6b 6e 6f 77 6e  encap = "unknown
66c0: 22 3b 0a 0a 09 09 61 64 64 72 5f 64 61 74 61 20  ";....addr_data 
66d0: 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  = (unsigned char
66e0: 20 2a 29 20 69 66 61 63 65 5f 72 65 71 2e 69 66   *) iface_req.if
66f0: 72 5f 68 77 61 64 64 72 2e 73 61 5f 64 61 74 61  r_hwaddr.sa_data
6700: 3b 0a 09 09 73 77 69 74 63 68 20 28 69 66 61 63  ;...switch (ifac
6710: 65 5f 72 65 71 2e 69 66 72 5f 68 77 61 64 64 72  e_req.ifr_hwaddr
6720: 2e 73 61 5f 66 61 6d 69 6c 79 29 20 7b 0a 09 09  .sa_family) {...
6730: 09 63 61 73 65 20 41 52 50 48 52 44 5f 45 54 48  .case ARPHRD_ETH
6740: 45 52 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  ER:.....link_enc
6750: 61 70 20 3d 20 22 65 74 68 65 72 6e 65 74 22 3b  ap = "ethernet";
6760: 0a 0a 09 09 09 09 54 63 6c 5f 4c 69 73 74 4f 62  ......Tcl_ListOb
6770: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
6780: 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20  nterp, retlist, 
6790: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
67a0: 28 22 68 77 61 64 64 72 22 2c 20 2d 31 29 29 3b  ("hwaddr", -1));
67b0: 0a 09 09 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a  .....Tcl_ListObj
67c0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
67d0: 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 0a 09  terp, retlist,..
67e0: 09 09 09 20 20 54 63 6c 5f 4f 62 6a 50 72 69 6e  ...  Tcl_ObjPrin
67f0: 74 66 28 22 25 30 32 78 3a 25 30 32 78 3a 25 30  tf("%02x:%02x:%0
6800: 32 78 3a 25 30 32 78 3a 25 30 32 78 3a 25 30 32  2x:%02x:%02x:%02
6810: 78 22 2c 0a 09 09 09 09 20 20 20 20 61 64 64 72  x",.....    addr
6820: 5f 64 61 74 61 5b 30 5d 2c 0a 09 09 09 09 20 20  _data[0],.....  
6830: 20 20 61 64 64 72 5f 64 61 74 61 5b 31 5d 2c 0a    addr_data[1],.
6840: 09 09 09 09 20 20 20 20 61 64 64 72 5f 64 61 74  ....    addr_dat
6850: 61 5b 32 5d 2c 0a 09 09 09 09 20 20 20 20 61 64  a[2],.....    ad
6860: 64 72 5f 64 61 74 61 5b 33 5d 2c 0a 09 09 09 09  dr_data[3],.....
6870: 20 20 20 20 61 64 64 72 5f 64 61 74 61 5b 34 5d      addr_data[4]
6880: 2c 0a 09 09 09 09 20 20 20 20 61 64 64 72 5f 64  ,.....    addr_d
6890: 61 74 61 5b 35 5d 0a 09 09 09 09 20 20 29 0a 09  ata[5].....  )..
68a0: 09 09 09 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b  ...);......break
68b0: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
68c0: 5f 41 58 32 35 3a 0a 09 09 09 09 6c 69 6e 6b 5f  _AX25:.....link_
68d0: 65 6e 63 61 70 20 3d 20 22 61 78 32 35 22 3b 0a  encap = "ax25";.
68e0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
68f0: 73 65 20 41 52 50 48 52 44 5f 50 52 4f 4e 45 54  se ARPHRD_PRONET
6900: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
6910: 20 3d 20 22 70 72 6f 6e 65 74 22 3b 0a 09 09 09   = "pronet";....
6920: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
6930: 41 52 50 48 52 44 5f 43 48 41 4f 53 3a 0a 09 09  ARPHRD_CHAOS:...
6940: 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22  ..link_encap = "
6950: 63 68 61 6f 73 22 3b 0a 09 09 09 09 62 72 65 61  chaos";.....brea
6960: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
6970: 44 5f 49 45 45 45 38 30 32 3a 0a 09 09 09 09 6c  D_IEEE802:.....l
6980: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 69 65 65  ink_encap = "iee
6990: 65 38 30 32 22 3b 0a 09 09 09 09 62 72 65 61 6b  e802";.....break
69a0: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
69b0: 5f 41 52 43 4e 45 54 3a 0a 09 09 09 09 6c 69 6e  _ARCNET:.....lin
69c0: 6b 5f 65 6e 63 61 70 20 3d 20 22 61 72 63 6e 65  k_encap = "arcne
69d0: 74 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  t";.....break;..
69e0: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 41 50  ..case ARPHRD_AP
69f0: 50 4c 45 54 4c 4b 3a 0a 09 09 09 09 6c 69 6e 6b  PLETLK:.....link
6a00: 5f 65 6e 63 61 70 20 3d 20 22 61 70 70 6c 65 74  _encap = "applet
6a10: 6c 6b 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  lk";.....break;.
6a20: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 44  ...case ARPHRD_D
6a30: 4c 43 49 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e  LCI:.....link_en
6a40: 63 61 70 20 3d 20 22 64 6c 63 69 22 3b 0a 09 09  cap = "dlci";...
6a50: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
6a60: 20 41 52 50 48 52 44 5f 41 54 4d 3a 0a 09 09 09   ARPHRD_ATM:....
6a70: 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 61  .link_encap = "a
6a80: 74 6d 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  tm";.....break;.
6a90: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 4d  ...case ARPHRD_M
6aa0: 45 54 52 49 43 4f 4d 3a 0a 09 09 09 09 6c 69 6e  ETRICOM:.....lin
6ab0: 6b 5f 65 6e 63 61 70 20 3d 20 22 6d 65 74 72 69  k_encap = "metri
6ac0: 63 6f 6d 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  com";.....break;
6ad0: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
6ae0: 49 45 45 45 31 33 39 34 3a 0a 09 09 09 09 6c 69  IEEE1394:.....li
6af0: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 69 65 65 65  nk_encap = "ieee
6b00: 31 33 39 34 22 3b 0a 09 09 09 09 62 72 65 61 6b  1394";.....break
6b10: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
6b20: 5f 45 55 49 36 34 3a 0a 09 09 09 09 6c 69 6e 6b  _EUI64:.....link
6b30: 5f 65 6e 63 61 70 20 3d 20 22 65 75 69 36 34 22  _encap = "eui64"
6b40: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
6b50: 63 61 73 65 20 41 52 50 48 52 44 5f 49 4e 46 49  case ARPHRD_INFI
6b60: 4e 49 42 41 4e 44 3a 0a 09 09 09 09 6c 69 6e 6b  NIBAND:.....link
6b70: 5f 65 6e 63 61 70 20 3d 20 22 69 6e 66 69 6e 69  _encap = "infini
6b80: 62 61 6e 64 22 3b 0a 09 09 09 09 62 72 65 61 6b  band";.....break
6b90: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
6ba0: 5f 53 4c 49 50 3a 0a 09 09 09 09 6c 69 6e 6b 5f  _SLIP:.....link_
6bb0: 65 6e 63 61 70 20 3d 20 22 73 6c 69 70 22 3b 0a  encap = "slip";.
6bc0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
6bd0: 73 65 20 41 52 50 48 52 44 5f 43 53 4c 49 50 3a  se ARPHRD_CSLIP:
6be0: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
6bf0: 3d 20 22 63 73 6c 69 70 22 3b 0a 09 09 09 09 62  = "cslip";.....b
6c00: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52  reak;....case AR
6c10: 50 48 52 44 5f 53 4c 49 50 36 3a 0a 09 09 09 09  PHRD_SLIP6:.....
6c20: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 73 6c  link_encap = "sl
6c30: 69 70 36 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  ip6";.....break;
6c40: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
6c50: 43 53 4c 49 50 36 3a 0a 09 09 09 09 6c 69 6e 6b  CSLIP6:.....link
6c60: 5f 65 6e 63 61 70 20 3d 20 22 63 73 6c 69 70 36  _encap = "cslip6
6c70: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ";.....break;...
6c80: 09 63 61 73 65 20 41 52 50 48 52 44 5f 52 53 52  .case ARPHRD_RSR
6c90: 56 44 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  VD:.....link_enc
6ca0: 61 70 20 3d 20 22 72 73 72 76 64 22 3b 0a 09 09  ap = "rsrvd";...
6cb0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
6cc0: 20 41 52 50 48 52 44 5f 41 44 41 50 54 3a 0a 09   ARPHRD_ADAPT:..
6cd0: 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20  ...link_encap = 
6ce0: 22 61 64 61 70 74 22 3b 0a 09 09 09 09 62 72 65  "adapt";.....bre
6cf0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48  ak;....case ARPH
6d00: 52 44 5f 52 4f 53 45 3a 0a 09 09 09 09 6c 69 6e  RD_ROSE:.....lin
6d10: 6b 5f 65 6e 63 61 70 20 3d 20 22 72 6f 73 65 22  k_encap = "rose"
6d20: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
6d30: 63 61 73 65 20 41 52 50 48 52 44 5f 58 32 35 3a  case ARPHRD_X25:
6d40: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
6d50: 3d 20 22 78 32 35 22 3b 0a 09 09 09 09 62 72 65  = "x25";.....bre
6d60: 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48  ak;....case ARPH
6d70: 52 44 5f 48 57 58 32 35 3a 0a 09 09 09 09 6c 69  RD_HWX25:.....li
6d80: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 68 77 78 32  nk_encap = "hwx2
6d90: 35 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  5";.....break;..
6da0: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 43 41  ..case ARPHRD_CA
6db0: 4e 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  N:.....link_enca
6dc0: 70 20 3d 20 22 63 61 6e 22 3b 0a 09 09 09 09 62  p = "can";.....b
6dd0: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52  reak;....case AR
6de0: 50 48 52 44 5f 50 50 50 3a 0a 09 09 09 09 6c 69  PHRD_PPP:.....li
6df0: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 70 70 70 22  nk_encap = "ppp"
6e00: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
6e10: 63 61 73 65 20 41 52 50 48 52 44 5f 43 49 53 43  case ARPHRD_CISC
6e20: 4f 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  O:.....link_enca
6e30: 70 20 3d 20 22 63 69 73 63 6f 22 3b 0a 09 09 09  p = "cisco";....
6e40: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
6e50: 41 52 50 48 52 44 5f 4c 41 50 42 3a 0a 09 09 09  ARPHRD_LAPB:....
6e60: 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 6c  .link_encap = "l
6e70: 61 70 62 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  apb";.....break;
6e80: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
6e90: 44 44 43 4d 50 3a 0a 09 09 09 09 6c 69 6e 6b 5f  DDCMP:.....link_
6ea0: 65 6e 63 61 70 20 3d 20 22 64 64 63 6d 70 22 3b  encap = "ddcmp";
6eb0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
6ec0: 61 73 65 20 41 52 50 48 52 44 5f 52 41 57 48 44  ase ARPHRD_RAWHD
6ed0: 4c 43 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  LC:.....link_enc
6ee0: 61 70 20 3d 20 22 72 61 77 68 64 6c 63 22 3b 0a  ap = "rawhdlc";.
6ef0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
6f00: 73 65 20 41 52 50 48 52 44 5f 54 55 4e 4e 45 4c  se ARPHRD_TUNNEL
6f10: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
6f20: 20 3d 20 22 74 75 6e 6e 65 6c 22 3b 0a 09 09 09   = "tunnel";....
6f30: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
6f40: 41 52 50 48 52 44 5f 54 55 4e 4e 45 4c 36 3a 0a  ARPHRD_TUNNEL6:.
6f50: 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d  ....link_encap =
6f60: 20 22 74 75 6e 6e 65 6c 36 22 3b 0a 09 09 09 09   "tunnel6";.....
6f70: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41  break;....case A
6f80: 52 50 48 52 44 5f 46 52 41 44 3a 0a 09 09 09 09  RPHRD_FRAD:.....
6f90: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 66 72  link_encap = "fr
6fa0: 61 64 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  ad";.....break;.
6fb0: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 53  ...case ARPHRD_S
6fc0: 4b 49 50 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e  KIP:.....link_en
6fd0: 63 61 70 20 3d 20 22 73 6b 69 70 22 3b 0a 09 09  cap = "skip";...
6fe0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
6ff0: 20 41 52 50 48 52 44 5f 4c 4f 4f 50 42 41 43 4b   ARPHRD_LOOPBACK
7000: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
7010: 20 3d 20 22 6c 6f 6f 70 62 61 63 6b 22 3b 0a 09   = "loopback";..
7020: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
7030: 65 20 41 52 50 48 52 44 5f 4c 4f 43 41 4c 54 4c  e ARPHRD_LOCALTL
7040: 4b 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  K:.....link_enca
7050: 70 20 3d 20 22 6c 6f 63 61 6c 74 61 6c 6b 22 3b  p = "localtalk";
7060: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
7070: 61 73 65 20 41 52 50 48 52 44 5f 46 44 44 49 3a  ase ARPHRD_FDDI:
7080: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
7090: 3d 20 22 66 64 64 69 22 3b 0a 09 09 09 09 62 72  = "fddi";.....br
70a0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50  eak;....case ARP
70b0: 48 52 44 5f 42 49 46 3a 0a 09 09 09 09 6c 69 6e  HRD_BIF:.....lin
70c0: 6b 5f 65 6e 63 61 70 20 3d 20 22 62 69 66 22 3b  k_encap = "bif";
70d0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
70e0: 61 73 65 20 41 52 50 48 52 44 5f 53 49 54 3a 0a  ase ARPHRD_SIT:.
70f0: 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d  ....link_encap =
7100: 20 22 73 69 74 22 3b 0a 09 09 09 09 62 72 65 61   "sit";.....brea
7110: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
7120: 44 5f 49 50 44 44 50 3a 0a 09 09 09 09 6c 69 6e  D_IPDDP:.....lin
7130: 6b 5f 65 6e 63 61 70 20 3d 20 22 69 70 64 64 70  k_encap = "ipddp
7140: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ";.....break;...
7150: 09 63 61 73 65 20 41 52 50 48 52 44 5f 49 50 47  .case ARPHRD_IPG
7160: 52 45 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  RE:.....link_enc
7170: 61 70 20 3d 20 22 67 72 65 22 3b 0a 09 09 09 09  ap = "gre";.....
7180: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41  break;....case A
7190: 52 50 48 52 44 5f 50 49 4d 52 45 47 3a 0a 09 09  RPHRD_PIMREG:...
71a0: 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22  ..link_encap = "
71b0: 70 69 6d 72 65 67 22 3b 0a 09 09 09 09 62 72 65  pimreg";.....bre
71c0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48  ak;....case ARPH
71d0: 52 44 5f 48 49 50 50 49 3a 0a 09 09 09 09 6c 69  RD_HIPPI:.....li
71e0: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 68 69 70 70  nk_encap = "hipp
71f0: 69 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  i";.....break;..
7200: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 41 53  ..case ARPHRD_AS
7210: 48 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  H:.....link_enca
7220: 70 20 3d 20 22 61 73 68 22 3b 0a 09 09 09 09 62  p = "ash";.....b
7230: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52  reak;....case AR
7240: 50 48 52 44 5f 45 43 4f 4e 45 54 3a 0a 09 09 09  PHRD_ECONET:....
7250: 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 65  .link_encap = "e
7260: 63 6f 6e 65 74 22 3b 0a 09 09 09 09 62 72 65 61  conet";.....brea
7270: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
7280: 44 5f 49 52 44 41 3a 0a 09 09 09 09 6c 69 6e 6b  D_IRDA:.....link
7290: 5f 65 6e 63 61 70 20 3d 20 22 69 72 64 61 22 3b  _encap = "irda";
72a0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a  .....break;...}.
72b0: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
72c0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
72d0: 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 54 63 6c  rp, retlist, Tcl
72e0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6c  _NewStringObj("l
72f0: 69 6e 6b 5f 65 6e 63 61 70 22 2c 20 2d 31 29 29  ink_encap", -1))
7300: 3b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;...Tcl_ListObjA
7310: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
7320: 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 54 63  erp, retlist, Tc
7330: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 6c  l_NewStringObj(l
7340: 69 6e 6b 5f 65 6e 63 61 70 2c 20 2d 31 29 29 3b  ink_encap, -1));
7350: 0a 09 7d 0a 0a 09 69 6f 63 74 6c 5f 72 65 74 20  ..}...ioctl_ret 
7360: 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 53 49  = ioctl(sock, SI
7370: 4f 43 47 49 46 4d 45 54 52 49 43 2c 20 26 69 66  OCGIFMETRIC, &if
7380: 61 63 65 5f 72 65 71 29 3b 0a 09 69 66 20 28 69  ace_req);..if (i
7390: 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b  octl_ret == 0) {
73a0: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
73b0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
73c0: 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 54 63 6c  rp, retlist, Tcl
73d0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6d  _NewStringObj("m
73e0: 65 74 72 69 63 22 2c 20 2d 31 29 29 3b 0a 09 09  etric", -1));...
73f0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
7400: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
7410: 20 72 65 74 6c 69 73 74 2c 20 54 63 6c 5f 4e 65   retlist, Tcl_Ne
7420: 77 57 69 64 65 49 6e 74 4f 62 6a 28 69 66 61 63  wWideIntObj(ifac
7430: 65 5f 72 65 71 2e 69 66 72 5f 6d 65 74 72 69 63  e_req.ifr_metric
7440: 20 2b 20 31 29 29 3b 0a 09 7d 0a 0a 09 69 6f 63   + 1));..}...ioc
7450: 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 73  tl_ret = ioctl(s
7460: 6f 63 6b 2c 20 53 49 4f 43 47 49 46 4d 54 55 2c  ock, SIOCGIFMTU,
7470: 20 26 69 66 61 63 65 5f 72 65 71 29 3b 0a 09 69   &iface_req);..i
7480: 66 20 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20  f (ioctl_ret == 
7490: 30 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f  0) {...Tcl_ListO
74a0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
74b0: 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c  interp, retlist,
74c0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
74d0: 6a 28 22 6d 74 75 22 2c 20 2d 31 29 29 3b 0a 09  j("mtu", -1));..
74e0: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65  .Tcl_ListObjAppe
74f0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
7500: 2c 20 72 65 74 6c 69 73 74 2c 20 54 63 6c 5f 4e  , retlist, Tcl_N
7510: 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69 66 61  ewWideIntObj(ifa
7520: 63 65 5f 72 65 71 2e 69 66 72 5f 6d 74 75 29 29  ce_req.ifr_mtu))
7530: 3b 0a 09 7d 0a 0a 09 69 6f 63 74 6c 5f 72 65 74  ;..}...ioctl_ret
7540: 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 53   = ioctl(sock, S
7550: 49 4f 43 47 49 46 49 4e 44 45 58 2c 20 26 69 66  IOCGIFINDEX, &if
7560: 61 63 65 5f 72 65 71 29 3b 0a 09 69 66 20 28 69  ace_req);..if (i
7570: 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b  octl_ret == 0) {
7580: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
7590: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
75a0: 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 54 63 6c  rp, retlist, Tcl
75b0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69  _NewStringObj("i
75c0: 6e 64 65 78 22 2c 20 2d 31 29 29 3b 0a 09 09 54  ndex", -1));...T
75d0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
75e0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
75f0: 72 65 74 6c 69 73 74 2c 20 54 63 6c 5f 4e 65 77  retlist, Tcl_New
7600: 57 69 64 65 49 6e 74 4f 62 6a 28 69 66 61 63 65  WideIntObj(iface
7610: 5f 72 65 71 2e 69 66 72 5f 69 66 69 6e 64 65 78  _req.ifr_ifindex
7620: 29 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63  ));..}...if (soc
7630: 6b 5f 76 34 20 21 3d 20 2d 31 29 20 7b 0a 09 09  k_v4 != -1) {...
7640: 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74  ioctl_ret = ioct
7650: 6c 28 73 6f 63 6b 5f 76 34 2c 20 53 49 4f 43 47  l(sock_v4, SIOCG
7660: 49 46 41 44 44 52 2c 20 26 69 66 61 63 65 5f 72  IFADDR, &iface_r
7670: 65 71 29 3b 0a 09 09 69 66 20 28 69 6f 63 74 6c  eq);...if (ioctl
7680: 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09 09 09  _ret == 0) {....
7690: 74 63 6c 73 79 73 74 65 6d 5f 70 72 69 76 61 74  tclsystem_privat
76a0: 65 5f 61 70 70 65 6e 64 5f 73 6f 63 6b 61 64 64  e_append_sockadd
76b0: 72 5f 74 6f 5f 74 63 6c 6f 62 6a 28 69 6e 74 65  r_to_tclobj(inte
76c0: 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 22 61 64  rp, retlist, "ad
76d0: 64 72 65 73 73 22 2c 20 26 69 66 61 63 65 5f 72  dress", &iface_r
76e0: 65 71 2e 69 66 72 5f 61 64 64 72 29 3b 0a 09 09  eq.ifr_addr);...
76f0: 7d 0a 0a 09 09 69 66 20 28 66 6c 61 67 5f 70 6f  }....if (flag_po
7700: 69 6e 74 6f 70 6f 69 6e 74 29 20 7b 0a 09 09 09  intopoint) {....
7710: 2f 2a 20 50 6f 69 6e 74 2d 74 6f 2d 50 6f 69 6e  /* Point-to-Poin
7720: 74 20 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a  t interfaces */.
7730: 09 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69  ...ioctl_ret = i
7740: 6f 63 74 6c 28 73 6f 63 6b 5f 76 34 2c 20 53 49  octl(sock_v4, SI
7750: 4f 43 47 49 46 44 53 54 41 44 44 52 2c 20 26 69  OCGIFDSTADDR, &i
7760: 66 61 63 65 5f 72 65 71 29 3b 0a 09 09 09 69 66  face_req);....if
7770: 20 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30   (ioctl_ret == 0
7780: 29 20 7b 0a 09 09 09 09 74 63 6c 73 79 73 74 65  ) {.....tclsyste
7790: 6d 5f 70 72 69 76 61 74 65 5f 61 70 70 65 6e 64  m_private_append
77a0: 5f 73 6f 63 6b 61 64 64 72 5f 74 6f 5f 74 63 6c  _sockaddr_to_tcl
77b0: 6f 62 6a 28 69 6e 74 65 72 70 2c 20 72 65 74 6c  obj(interp, retl
77c0: 69 73 74 2c 20 22 64 65 73 74 69 6e 61 74 69 6f  ist, "destinatio
77d0: 6e 22 2c 20 26 69 66 61 63 65 5f 72 65 71 2e 69  n", &iface_req.i
77e0: 66 72 5f 61 64 64 72 29 3b 0a 09 09 09 7d 0a 09  fr_addr);....}..
77f0: 09 7d 0a 0a 09 09 69 66 20 28 66 6c 61 67 5f 62  .}....if (flag_b
7800: 72 6f 61 64 63 61 73 74 29 20 7b 0a 09 09 09 2f  roadcast) {..../
7810: 2a 20 42 72 6f 61 64 63 61 73 74 20 69 6e 74 65  * Broadcast inte
7820: 72 66 61 63 65 73 20 2a 2f 0a 09 09 09 69 6f 63  rfaces */....ioc
7830: 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 73  tl_ret = ioctl(s
7840: 6f 63 6b 5f 76 34 2c 20 53 49 4f 43 47 49 46 42  ock_v4, SIOCGIFB
7850: 52 44 41 44 44 52 2c 20 26 69 66 61 63 65 5f 72  RDADDR, &iface_r
7860: 65 71 29 3b 0a 09 09 09 69 66 20 28 69 6f 63 74  eq);....if (ioct
7870: 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09 09  l_ret == 0) {...
7880: 09 09 74 63 6c 73 79 73 74 65 6d 5f 70 72 69 76  ..tclsystem_priv
7890: 61 74 65 5f 61 70 70 65 6e 64 5f 73 6f 63 6b 61  ate_append_socka
78a0: 64 64 72 5f 74 6f 5f 74 63 6c 6f 62 6a 28 69 6e  ddr_to_tclobj(in
78b0: 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 22  terp, retlist, "
78c0: 62 72 6f 61 64 63 61 73 74 22 2c 20 26 69 66 61  broadcast", &ifa
78d0: 63 65 5f 72 65 71 2e 69 66 72 5f 61 64 64 72 29  ce_req.ifr_addr)
78e0: 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 6f  ;....}...}....io
78f0: 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28  ctl_ret = ioctl(
7900: 73 6f 63 6b 5f 76 34 2c 20 53 49 4f 43 47 49 46  sock_v4, SIOCGIF
7910: 4e 45 54 4d 41 53 4b 2c 20 26 69 66 61 63 65 5f  NETMASK, &iface_
7920: 72 65 71 29 3b 0a 09 09 69 66 20 28 69 6f 63 74  req);...if (ioct
7930: 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09 09  l_ret == 0) {...
7940: 09 74 63 6c 73 79 73 74 65 6d 5f 70 72 69 76 61  .tclsystem_priva
7950: 74 65 5f 61 70 70 65 6e 64 5f 73 6f 63 6b 61 64  te_append_sockad
7960: 64 72 5f 74 6f 5f 74 63 6c 6f 62 6a 28 69 6e 74  dr_to_tclobj(int
7970: 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 22 6e  erp, retlist, "n
7980: 65 74 6d 61 73 6b 22 2c 20 26 69 66 61 63 65 5f  etmask", &iface_
7990: 72 65 71 2e 69 66 72 5f 61 64 64 72 29 3b 0a 09  req.ifr_addr);..
79a0: 09 7d 0a 09 7d 0a 0a 09 54 63 6c 5f 53 65 74 4f  .}..}...Tcl_SetO
79b0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
79c0: 20 72 65 74 6c 69 73 74 29 3b 0a 0a 09 72 65 74   retlist);...ret
79d0: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(TCL_OK);.}..
79e0: 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 73 79  static int tclsy
79f0: 73 74 65 6d 5f 69 66 63 6f 6e 66 69 67 5f 63 6f  stem_ifconfig_co
7a00: 6e 66 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64  nf(ClientData cd
7a10: 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  , Tcl_Interp *in
7a20: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20  terp, int objc, 
7a30: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
7a40: 62 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 2c  bjv[], int sock,
7a50: 20 69 6e 74 20 73 6f 63 6b 5f 76 34 2c 20 69 6e   int sock_v4, in
7a60: 74 20 73 6f 63 6b 5f 76 36 29 20 7b 0a 09 54 63  t sock_v6) {..Tc
7a70: 6c 5f 4f 62 6a 20 2a 6f 70 74 69 6f 6e 5f 6e 61  l_Obj *option_na
7a80: 6d 65 5f 6f 62 6a 2c 20 2a 6f 70 74 69 6f 6e 5f  me_obj, *option_
7a90: 76 61 6c 5f 6f 62 6a 3b 0a 09 54 63 6c 5f 4f 62  val_obj;..Tcl_Ob
7aa0: 6a 20 2a 2a 66 6c 61 67 73 5f 6f 62 6a 76 3b 0a  j **flags_objv;.
7ab0: 09 73 74 72 75 63 74 20 69 66 72 65 71 20 69 66  .struct ifreq if
7ac0: 61 63 65 5f 72 65 71 3b 0a 09 73 74 72 75 63 74  ace_req;..struct
7ad0: 20 73 6f 63 6b 61 64 64 72 20 2a 74 6d 70 5f 69   sockaddr *tmp_i
7ae0: 6f 63 74 6c 5f 61 64 64 72 3b 0a 09 63 6f 6e 73  octl_addr;..cons
7af0: 74 20 63 68 61 72 20 2a 69 66 61 63 65 3b 0a 09  t char *iface;..
7b00: 73 68 6f 72 74 20 66 6c 61 67 73 3b 0a 09 69 6e  short flags;..in
7b10: 74 20 66 6c 61 67 73 5f 6f 62 6a 63 3b 0a 09 69  t flags_objc;..i
7b20: 6e 74 20 74 6d 70 5f 73 6f 63 6b 2c 20 74 6d 70  nt tmp_sock, tmp
7b30: 5f 69 6f 63 74 6c 3b 0a 09 69 6e 74 20 69 6f 63  _ioctl;..int ioc
7b40: 74 6c 5f 72 65 74 2c 20 74 63 6c 5f 72 65 74 2c  tl_ret, tcl_ret,
7b50: 20 70 61 72 73 65 5f 72 65 74 3b 0a 0a 09 69 66   parse_ret;...if
7b60: 61 63 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  ace = Tcl_GetStr
7b70: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 09  ing(objv[1]);...
7b80: 69 66 20 28 28 73 74 72 6c 65 6e 28 69 66 61 63  if ((strlen(ifac
7b90: 65 29 20 2b 20 31 29 20 3e 3d 20 49 46 4e 41 4d  e) + 1) >= IFNAM
7ba0: 53 49 5a 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  SIZ) {...Tcl_Set
7bb0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
7bc0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
7bd0: 62 6a 28 22 69 6e 74 65 72 66 61 63 65 20 6e 61  bj("interface na
7be0: 6d 65 20 74 6f 6f 20 6c 6f 6e 67 22 2c 20 2d 31  me too long", -1
7bf0: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  ));....return(TC
7c00: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6f  L_ERROR);..}...o
7c10: 62 6a 63 20 2d 3d 20 32 3b 0a 09 6f 62 6a 76 20  bjc -= 2;..objv 
7c20: 2b 3d 20 32 3b 0a 0a 09 66 6f 72 20 28 3b 20 6f  += 2;...for (; o
7c30: 62 6a 63 20 3e 20 30 3b 20 6f 62 6a 63 2d 2d 2c  bjc > 0; objc--,
7c40: 6f 62 6a 76 2b 2b 29 20 7b 0a 09 09 2f 2a 20 50  objv++) {.../* P
7c50: 72 65 70 61 72 65 20 66 6f 72 20 61 6e 20 69 6f  repare for an io
7c60: 63 74 6c 28 29 20 2a 2f 0a 09 09 73 74 72 63 70  ctl() */...strcp
7c70: 79 28 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f  y(iface_req.ifr_
7c80: 6e 61 6d 65 2c 20 69 66 61 63 65 29 3b 0a 09 09  name, iface);...
7c90: 74 6d 70 5f 69 6f 63 74 6c 20 3d 20 2d 31 3b 0a  tmp_ioctl = -1;.
7ca0: 0a 09 09 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f  ...option_name_o
7cb0: 62 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b 0a 0a 09  bj = objv[0];...
7cc0: 09 69 66 20 28 6f 62 6a 63 20 3d 3d 20 31 29 20  .if (objc == 1) 
7cd0: 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  {....Tcl_SetObjR
7ce0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
7cf0: 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 6f 70 74  l_ObjPrintf("opt
7d00: 69 6f 6e 20 5c 22 25 73 5c 22 20 72 65 71 75 69  ion \"%s\" requi
7d10: 72 65 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 22  res an argument"
7d20: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
7d30: 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29  option_name_obj)
7d40: 29 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54  ));.....return(T
7d50: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a  CL_ERROR);...}..
7d60: 09 09 6f 62 6a 63 2d 2d 3b 0a 09 09 6f 62 6a 76  ..objc--;...objv
7d70: 2b 2b 3b 0a 0a 09 09 6f 70 74 69 6f 6e 5f 76 61  ++;....option_va
7d80: 6c 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b  l_obj = objv[0];
7d90: 0a 0a 09 09 73 77 69 74 63 68 20 28 74 63 6c 73  ....switch (tcls
7da0: 79 73 74 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 73  ystem_internal_s
7db0: 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f 70  implehash_obj(op
7dc0: 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29 29 20  tion_name_obj)) 
7dd0: 7b 0a 09 09 09 63 61 73 65 20 30 78 36 64 39 38  {....case 0x6d98
7de0: 37 30 66 33 3a 20 2f 2a 20 66 6c 61 67 73 20 2a  70f3: /* flags *
7df0: 2f 0a 09 09 09 09 66 6c 61 67 73 20 3d 20 30 3b  /.....flags = 0;
7e00: 0a 0a 09 09 09 09 74 63 6c 5f 72 65 74 20 3d 20  ......tcl_ret = 
7e10: 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c  Tcl_ListObjGetEl
7e20: 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 20 6f  ements(interp, o
7e30: 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 2c 20 26  ption_val_obj, &
7e40: 66 6c 61 67 73 5f 6f 62 6a 63 2c 20 26 66 6c 61  flags_objc, &fla
7e50: 67 73 5f 6f 62 6a 76 29 3b 0a 09 09 09 09 69 66  gs_objv);.....if
7e60: 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c   (tcl_ret != TCL
7e70: 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 72 65 74 75  _OK) {......retu
7e80: 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09 09 09  rn(tcl_ret);....
7e90: 09 7d 0a 0a 09 09 09 09 66 6f 72 20 28 3b 20 66  .}......for (; f
7ea0: 6c 61 67 73 5f 6f 62 6a 63 20 3e 20 30 3b 20 66  lags_objc > 0; f
7eb0: 6c 61 67 73 5f 6f 62 6a 63 2d 2d 2c 66 6c 61 67  lags_objc--,flag
7ec0: 73 5f 6f 62 6a 76 2b 2b 29 20 7b 0a 09 09 09 09  s_objv++) {.....
7ed0: 09 73 77 69 74 63 68 20 28 74 63 6c 73 79 73 74  .switch (tclsyst
7ee0: 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70  em_internal_simp
7ef0: 6c 65 68 61 73 68 5f 6f 62 6a 28 66 6c 61 67 73  lehash_obj(flags
7f00: 5f 6f 62 6a 76 5b 30 5d 29 29 20 7b 0a 09 09 09  _objv[0])) {....
7f10: 09 09 09 63 61 73 65 20 30 78 32 61 64 30 3a 20  ...case 0x2ad0: 
7f20: 2f 2a 20 55 50 20 2a 2f 0a 09 09 09 09 09 09 09  /* UP */........
7f30: 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f 55 50 3b  flags |= IFF_UP;
7f40: 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ........break;..
7f50: 09 09 09 09 09 63 61 73 65 20 30 78 31 61 65 66  .....case 0x1aef
7f60: 37 66 35 34 3a 20 2f 2a 20 42 52 4f 41 44 43 41  7f54: /* BROADCA
7f70: 53 54 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61  ST */........fla
7f80: 67 73 20 7c 3d 20 49 46 46 5f 42 52 4f 41 44 43  gs |= IFF_BROADC
7f90: 41 53 54 3b 0a 09 09 09 09 09 09 09 62 72 65 61  AST;........brea
7fa0: 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78  k;.......case 0x
7fb0: 63 32 35 32 61 62 64 34 3a 20 2f 2a 20 50 4f 49  c252abd4: /* POI
7fc0: 4e 54 4f 50 4f 49 4e 54 20 2a 2f 0a 09 09 09 09  NTOPOINT */.....
7fd0: 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f  ...flags |= IFF_
7fe0: 50 4f 49 4e 54 4f 50 4f 49 4e 54 3b 0a 09 09 09  POINTOPOINT;....
7ff0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09  ....break;......
8000: 09 63 61 73 65 20 30 78 34 38 62 30 61 38 63 37  .case 0x48b0a8c7
8010: 3a 20 2f 2a 20 44 45 42 55 47 20 2a 2f 0a 09 09  : /* DEBUG */...
8020: 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46  .....flags |= IF
8030: 46 5f 44 45 42 55 47 3b 0a 09 09 09 09 09 09 09  F_DEBUG;........
8040: 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63 61 73  break;.......cas
8050: 65 20 30 78 34 64 33 64 62 63 64 33 3a 20 2f 2a  e 0x4d3dbcd3: /*
8060: 20 4e 4f 54 52 41 49 4c 45 52 53 20 2a 2f 0a 09   NOTRAILERS */..
8070: 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49  ......flags |= I
8080: 46 46 5f 4e 4f 54 52 41 49 4c 45 52 53 3b 0a 09  FF_NOTRAILERS;..
8090: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
80a0: 09 09 09 63 61 73 65 20 30 78 65 39 37 37 33 31  ...case 0xe97731
80b0: 34 37 3a 20 2f 2a 20 52 55 4e 4e 49 4e 47 20 2a  47: /* RUNNING *
80c0: 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c  /........flags |
80d0: 3d 20 49 46 46 5f 52 55 4e 4e 49 4e 47 3b 0a 09  = IFF_RUNNING;..
80e0: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
80f0: 09 09 09 63 61 73 65 20 30 78 65 39 66 30 36 62  ...case 0xe9f06b
8100: 35 30 3a 20 2f 2a 20 4e 4f 41 52 50 20 2a 2f 0a  50: /* NOARP */.
8110: 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20  .......flags |= 
8120: 49 46 46 5f 4e 4f 41 52 50 3b 0a 09 09 09 09 09  IFF_NOARP;......
8130: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63  ..break;.......c
8140: 61 73 65 20 30 78 66 39 31 33 32 33 63 33 3a 20  ase 0xf91323c3: 
8150: 2f 2a 20 50 52 4f 4d 49 53 43 20 2a 2f 0a 09 09  /* PROMISC */...
8160: 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46  .....flags |= IF
8170: 46 5f 50 52 4f 4d 49 53 43 3b 0a 09 09 09 09 09  F_PROMISC;......
8180: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63  ..break;.......c
8190: 61 73 65 20 30 78 39 62 32 61 31 38 34 39 3a 20  ase 0x9b2a1849: 
81a0: 2f 2a 20 41 4c 4c 4d 55 4c 54 49 20 2a 2f 0a 09  /* ALLMULTI */..
81b0: 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49  ......flags |= I
81c0: 46 46 5f 41 4c 4c 4d 55 4c 54 49 3b 0a 09 09 09  FF_ALLMULTI;....
81d0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09  ....break;......
81e0: 09 63 61 73 65 20 30 78 31 61 37 34 31 34 64 32  .case 0x1a7414d2
81f0: 3a 20 2f 2a 20 4d 41 53 54 45 52 20 2a 2f 0a 09  : /* MASTER */..
8200: 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49  ......flags |= I
8210: 46 46 5f 4d 41 53 54 45 52 3b 0a 09 09 09 09 09  FF_MASTER;......
8220: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63  ..break;.......c
8230: 61 73 65 20 30 78 33 39 39 30 36 39 63 35 3a 20  ase 0x399069c5: 
8240: 2f 2a 20 53 4c 41 56 45 20 2a 2f 0a 09 09 09 09  /* SLAVE */.....
8250: 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f  ...flags |= IFF_
8260: 53 4c 41 56 45 3b 0a 09 09 09 09 09 09 09 62 72  SLAVE;........br
8270: 65 61 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20  eak;.......case 
8280: 30 78 34 64 65 39 32 38 64 34 3a 20 2f 2a 20 4d  0x4de928d4: /* M
8290: 55 4c 54 49 43 41 53 54 20 2a 2f 0a 09 09 09 09  ULTICAST */.....
82a0: 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f  ...flags |= IFF_
82b0: 4d 55 4c 54 49 43 41 53 54 3b 0a 09 09 09 09 09  MULTICAST;......
82c0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63  ..break;.......c
82d0: 61 73 65 20 30 78 32 61 33 35 64 63 34 63 3a 20  ase 0x2a35dc4c: 
82e0: 2f 2a 20 50 4f 52 54 53 45 4c 20 2a 2f 0a 09 09  /* PORTSEL */...
82f0: 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46  .....flags |= IF
8300: 46 5f 50 4f 52 54 53 45 4c 3b 0a 09 09 09 09 09  F_PORTSEL;......
8310: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63  ..break;.......c
8320: 61 73 65 20 30 78 64 31 38 30 61 63 31 3a 20 2f  ase 0xd180ac1: /
8330: 2a 20 41 55 54 4f 4d 45 44 49 41 20 2a 2f 0a 09  * AUTOMEDIA */..
8340: 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49  ......flags |= I
8350: 46 46 5f 41 55 54 4f 4d 45 44 49 41 3b 0a 09 09  FF_AUTOMEDIA;...
8360: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09  .....break;.....
8370: 09 09 63 61 73 65 20 30 78 65 38 62 61 30 32 63  ..case 0xe8ba02c
8380: 33 3a 20 2f 2a 20 44 59 4e 41 4d 49 43 20 2a 2f  3: /* DYNAMIC */
8390: 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d  ........flags |=
83a0: 20 49 46 46 5f 44 59 4e 41 4d 49 43 3b 0a 09 09   IFF_DYNAMIC;...
83b0: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09  .....break;.....
83c0: 09 09 63 61 73 65 20 30 78 31 36 63 38 62 34 64  ..case 0x16c8b4d
83d0: 30 3a 20 2f 2a 20 4c 4f 57 45 52 5f 55 50 20 2a  0: /* LOWER_UP *
83e0: 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c  /........flags |
83f0: 3d 20 49 46 46 5f 4c 4f 57 45 52 5f 55 50 3b 0a  = IFF_LOWER_UP;.
8400: 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  .......break;...
8410: 09 09 09 09 63 61 73 65 20 30 78 32 39 33 39 35  ....case 0x29395
8420: 39 64 34 3a 20 2f 2a 20 44 4f 52 4d 41 4e 54 20  9d4: /* DORMANT 
8430: 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20  */........flags 
8440: 7c 3d 20 49 46 46 5f 44 4f 52 4d 41 4e 54 3b 0a  |= IFF_DORMANT;.
8450: 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 23 69  .......break;.#i
8460: 66 64 65 66 20 49 46 46 5f 45 43 48 4f 0a 09 09  fdef IFF_ECHO...
8470: 09 09 09 09 63 61 73 65 20 30 78 38 62 30 65 34  ....case 0x8b0e4
8480: 34 66 3a 20 2f 2a 20 45 43 48 4f 20 2a 2f 0a 09  4f: /* ECHO */..
8490: 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49  ......flags |= I
84a0: 46 46 5f 45 43 48 4f 3b 0a 09 09 09 09 09 09 09  FF_ECHO;........
84b0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 09 09  break;.#endif...
84c0: 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09  ...}.....}......
84d0: 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 66 6c  iface_req.ifr_fl
84e0: 61 67 73 20 3d 20 66 6c 61 67 73 3b 0a 0a 09 09  ags = flags;....
84f0: 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f  ..ioctl_ret = io
8500: 63 74 6c 28 73 6f 63 6b 2c 20 53 49 4f 43 53 49  ctl(sock, SIOCSI
8510: 46 46 4c 41 47 53 2c 20 26 69 66 61 63 65 5f 72  FFLAGS, &iface_r
8520: 65 71 29 3b 0a 09 09 09 09 69 66 20 28 69 6f 63  eq);.....if (ioc
8530: 74 6c 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  tl_ret != 0) {..
8540: 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
8550: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
8560: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74  _NewStringObj(st
8570: 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d  rerror(errno), -
8580: 31 29 29 3b 0a 0a 09 09 09 09 09 72 65 74 75 72  1));.......retur
8590: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09  n(TCL_ERROR);...
85a0: 09 09 7d 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a  ..}......break;.
85b0: 09 09 09 63 61 73 65 20 30 78 35 65 39 64 30 33  ...case 0x5e9d03
85c0: 65 33 3a 20 2f 2a 20 6d 65 74 72 69 63 20 2a 2f  e3: /* metric */
85d0: 0a 09 09 09 63 61 73 65 20 30 78 31 62 37 61 37  ....case 0x1b7a7
85e0: 35 3a 20 2f 2a 20 6d 74 75 20 2a 2f 0a 09 09 09  5: /* mtu */....
85f0: 63 61 73 65 20 30 78 37 63 33 38 39 31 66 32 3a  case 0x7c3891f2:
8600: 20 2f 2a 20 68 77 61 64 64 72 20 2a 2f 0a 09 09   /* hwaddr */...
8610: 09 63 61 73 65 20 30 78 62 66 37 32 61 39 36 39  .case 0xbf72a969
8620: 3a 20 2f 2a 20 61 64 64 6d 75 6c 74 69 20 2a 2f  : /* addmulti */
8630: 0a 09 09 09 63 61 73 65 20 30 78 62 61 37 30 38  ....case 0xba708
8640: 39 36 39 3a 20 2f 2a 20 64 65 6c 6d 75 6c 74 69  969: /* delmulti
8650: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 64 64   */....case 0xdd
8660: 38 37 36 65 35 3a 20 2f 2a 20 6e 61 6d 65 20 2a  876e5: /* name *
8670: 2f 0a 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62  /......Tcl_SetOb
8680: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
8690: 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 6f  Tcl_ObjPrintf("o
86a0: 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 75 6e 73  ption \"%s\" uns
86b0: 75 70 70 6f 72 74 65 64 22 2c 20 54 63 6c 5f 47  upported", Tcl_G
86c0: 65 74 53 74 72 69 6e 67 28 6f 70 74 69 6f 6e 5f  etString(option_
86d0: 6e 61 6d 65 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09  name_obj)));....
86e0: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
86f0: 52 4f 52 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b  ROR);.....break;
8700: 0a 09 09 09 63 61 73 65 20 30 78 34 65 39 61 65  ....case 0x4e9ae
8710: 61 66 33 3a 20 2f 2a 20 61 64 64 72 65 73 73 20  af3: /* address 
8720: 2a 2f 0a 09 09 09 09 69 66 20 28 74 6d 70 5f 69  */.....if (tmp_i
8730: 6f 63 74 6c 20 3d 3d 20 2d 31 29 20 7b 0a 09 09  octl == -1) {...
8740: 09 09 09 74 6d 70 5f 69 6f 63 74 6c 20 3d 20 53  ...tmp_ioctl = S
8750: 49 4f 43 53 49 46 41 44 44 52 3b 0a 09 09 09 09  IOCSIFADDR;.....
8760: 09 74 6d 70 5f 69 6f 63 74 6c 5f 61 64 64 72 20  .tmp_ioctl_addr 
8770: 3d 20 26 69 66 61 63 65 5f 72 65 71 2e 69 66 72  = &iface_req.ifr
8780: 5f 61 64 64 72 3b 0a 09 09 09 09 7d 0a 0a 09 09  _addr;.....}....
8790: 09 63 61 73 65 20 30 78 65 63 30 35 37 30 36 65  .case 0xec05706e
87a0: 3a 20 2f 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e  : /* destination
87b0: 20 2a 2f 0a 09 09 09 09 69 66 20 28 74 6d 70 5f   */.....if (tmp_
87c0: 69 6f 63 74 6c 20 3d 3d 20 2d 31 29 20 7b 0a 09  ioctl == -1) {..
87d0: 09 09 09 09 74 6d 70 5f 69 6f 63 74 6c 20 3d 20  ....tmp_ioctl = 
87e0: 53 49 4f 43 53 49 46 44 53 54 41 44 44 52 3b 0a  SIOCSIFDSTADDR;.
87f0: 09 09 09 09 09 74 6d 70 5f 69 6f 63 74 6c 5f 61  .....tmp_ioctl_a
8800: 64 64 72 20 3d 20 26 69 66 61 63 65 5f 72 65 71  ddr = &iface_req
8810: 2e 69 66 72 5f 64 73 74 61 64 64 72 3b 0a 09 09  .ifr_dstaddr;...
8820: 09 09 7d 0a 0a 09 09 09 63 61 73 65 20 30 78 33  ..}.....case 0x3
8830: 65 61 37 65 36 37 34 3a 20 2f 2a 20 62 72 6f 61  ea7e674: /* broa
8840: 64 63 61 73 74 20 2a 2f 0a 09 09 09 09 69 66 20  dcast */.....if 
8850: 28 74 6d 70 5f 69 6f 63 74 6c 20 3d 3d 20 2d 31  (tmp_ioctl == -1
8860: 29 20 7b 0a 09 09 09 09 09 74 6d 70 5f 69 6f 63  ) {......tmp_ioc
8870: 74 6c 20 3d 20 53 49 4f 43 53 49 46 42 52 44 41  tl = SIOCSIFBRDA
8880: 44 44 52 3b 0a 09 09 09 09 09 74 6d 70 5f 69 6f  DDR;......tmp_io
8890: 63 74 6c 5f 61 64 64 72 20 3d 20 26 69 66 61 63  ctl_addr = &ifac
88a0: 65 5f 72 65 71 2e 69 66 72 5f 62 72 6f 61 64 61  e_req.ifr_broada
88b0: 64 64 72 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 63  ddr;.....}.....c
88c0: 61 73 65 20 30 78 34 64 36 35 65 65 36 62 3a 20  ase 0x4d65ee6b: 
88d0: 2f 2a 20 6e 65 74 6d 61 73 6b 20 2a 2f 0a 09 09  /* netmask */...
88e0: 09 09 69 66 20 28 74 6d 70 5f 69 6f 63 74 6c 20  ..if (tmp_ioctl 
88f0: 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 09 09 74 6d  == -1) {......tm
8900: 70 5f 69 6f 63 74 6c 20 3d 20 53 49 4f 43 53 49  p_ioctl = SIOCSI
8910: 46 4e 45 54 4d 41 53 4b 3b 0a 09 09 09 09 09 74  FNETMASK;......t
8920: 6d 70 5f 69 6f 63 74 6c 5f 61 64 64 72 20 3d 20  mp_ioctl_addr = 
8930: 26 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 6e  &iface_req.ifr_n
8940: 65 74 6d 61 73 6b 3b 0a 09 09 09 09 7d 0a 0a 09  etmask;.....}...
8950: 09 09 09 70 61 72 73 65 5f 72 65 74 20 3d 20 74  ...parse_ret = t
8960: 63 6c 73 79 73 74 65 6d 5f 70 72 69 76 61 74 65  clsystem_private
8970: 5f 67 65 74 5f 73 6f 63 6b 61 64 64 72 5f 66 72  _get_sockaddr_fr
8980: 6f 6d 5f 6f 62 6a 28 6f 70 74 69 6f 6e 5f 76 61  om_obj(option_va
8990: 6c 5f 6f 62 6a 2c 20 74 6d 70 5f 69 6f 63 74 6c  l_obj, tmp_ioctl
89a0: 5f 61 64 64 72 29 3b 0a 09 09 09 09 69 66 20 28  _addr);.....if (
89b0: 70 61 72 73 65 5f 72 65 74 20 21 3d 20 30 29 20  parse_ret != 0) 
89c0: 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62  {......Tcl_SetOb
89d0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
89e0: 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75  Tcl_ObjPrintf("u
89f0: 6e 61 62 6c 65 20 74 6f 20 70 61 72 73 65 20 5c  nable to parse \
8a00: 22 25 73 5c 22 20 61 73 20 61 6e 20 61 64 64 72  "%s\" as an addr
8a10: 65 73 73 22 2c 20 54 63 6c 5f 47 65 74 53 74 72  ess", Tcl_GetStr
8a20: 69 6e 67 28 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f  ing(option_val_o
8a30: 62 6a 29 29 29 3b 0a 0a 09 09 09 09 09 72 65 74  bj)));.......ret
8a40: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
8a50: 09 09 09 09 7d 0a 0a 09 09 09 09 73 77 69 74 63  ....}......switc
8a60: 68 20 28 74 6d 70 5f 69 6f 63 74 6c 5f 61 64 64  h (tmp_ioctl_add
8a70: 72 2d 3e 73 61 5f 66 61 6d 69 6c 79 29 20 7b 0a  r->sa_family) {.
8a80: 09 09 09 09 09 63 61 73 65 20 41 46 5f 49 4e 45  .....case AF_INE
8a90: 54 3a 0a 09 09 09 09 09 09 74 6d 70 5f 73 6f 63  T:.......tmp_soc
8aa0: 6b 20 3d 20 73 6f 63 6b 5f 76 34 3b 0a 0a 09 09  k = sock_v4;....
8ab0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09  ....break;......
8ac0: 63 61 73 65 20 41 46 5f 49 4e 45 54 36 3a 0a 09  case AF_INET6:..
8ad0: 09 09 09 09 09 74 6d 70 5f 73 6f 63 6b 20 3d 20  .....tmp_sock = 
8ae0: 73 6f 63 6b 5f 76 36 3b 0a 0a 09 09 09 09 09 09  sock_v6;........
8af0: 62 72 65 61 6b 3b 0a 09 09 09 09 09 64 65 66 61  break;......defa
8b00: 75 6c 74 3a 0a 09 09 09 09 09 09 54 63 6c 5f 53  ult:.......Tcl_S
8b10: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
8b20: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
8b30: 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20  gObj("unable to 
8b40: 64 65 74 65 72 6d 69 6e 65 20 61 64 64 72 65 73  determine addres
8b50: 73 20 66 61 6d 69 6c 79 20 6f 66 20 73 6f 63 6b  s family of sock
8b60: 61 64 64 72 22 2c 20 2d 31 29 29 3b 0a 09 09 09  addr", -1));....
8b70: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
8b80: 52 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09  ROR);.....}.....
8b90: 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63  .ioctl_ret = ioc
8ba0: 74 6c 28 74 6d 70 5f 73 6f 63 6b 2c 20 74 6d 70  tl(tmp_sock, tmp
8bb0: 5f 69 6f 63 74 6c 2c 20 26 69 66 61 63 65 5f 72  _ioctl, &iface_r
8bc0: 65 71 29 3b 0a 09 09 09 09 69 66 20 28 69 6f 63  eq);.....if (ioc
8bd0: 74 6c 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  tl_ret != 0) {..
8be0: 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
8bf0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
8c00: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74  _NewStringObj(st
8c10: 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d  rerror(errno), -
8c20: 31 29 29 3b 0a 0a 09 09 09 09 09 72 65 74 75 72  1));.......retur
8c30: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09  n(TCL_ERROR);...
8c40: 09 09 7d 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a  ..}......break;.
8c50: 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09  ...default:.....
8c60: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
8c70: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a  (interp, Tcl_Obj
8c80: 50 72 69 6e 74 66 28 22 75 6e 6b 6e 6f 77 6e 20  Printf("unknown 
8c90: 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22 22 2c 20  option \"%s\"", 
8ca0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70  Tcl_GetString(op
8cb0: 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29 29 29  tion_name_obj)))
8cc0: 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54 43  ;......return(TC
8cd0: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 09 7d  L_ERROR);...}..}
8ce0: 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b  ...return(TCL_OK
8cf0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
8d00: 20 74 63 6c 73 79 73 74 65 6d 5f 69 66 63 6f 6e   tclsystem_ifcon
8d10: 66 69 67 28 43 6c 69 65 6e 74 44 61 74 61 20 63  fig(ClientData c
8d20: 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
8d30: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
8d40: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
8d50: 6f 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e 74 20 73  objv[]) {..int s
8d60: 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 2c  ock_v4, sock_v6,
8d70: 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 72 65 74 76   sock;..int retv
8d80: 61 6c 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  al = TCL_ERROR;.
8d90: 0a 09 73 6f 63 6b 20 3d 20 74 63 6c 73 79 73 74  ..sock = tclsyst
8da0: 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 67 65 74 73  em_internal_gets
8db0: 6f 63 6b 28 26 73 6f 63 6b 5f 76 34 2c 20 26 73  ock(&sock_v4, &s
8dc0: 6f 63 6b 5f 76 36 29 3b 0a 09 69 66 20 28 73 6f  ock_v6);..if (so
8dd0: 63 6b 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 54 63  ck == -1) {...Tc
8de0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
8df0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
8e00: 72 69 6e 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20  ringObj("unable 
8e10: 74 6f 20 63 72 65 61 74 65 20 73 6f 63 6b 65 74  to create socket
8e20: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
8e30: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
8e40: 7d 0a 0a 09 73 77 69 74 63 68 20 28 6f 62 6a 63  }...switch (objc
8e50: 29 20 7b 0a 09 09 63 61 73 65 20 30 3a 0a 09 09  ) {...case 0:...
8e60: 63 61 73 65 20 31 3a 20 2f 2a 20 4e 6f 20 61 72  case 1: /* No ar
8e70: 67 75 6d 65 6e 74 73 2c 20 6c 69 73 74 20 61 6c  guments, list al
8e80: 6c 20 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a  l interfaces */.
8e90: 09 09 09 72 65 74 76 61 6c 20 3d 20 74 63 6c 73  ...retval = tcls
8ea0: 79 73 74 65 6d 5f 69 66 63 6f 6e 66 69 67 5f 6c  ystem_ifconfig_l
8eb0: 69 73 74 28 63 64 2c 20 69 6e 74 65 72 70 2c 20  ist(cd, interp, 
8ec0: 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 73 6f 63 6b  objc, objv, sock
8ed0: 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  );.....break;...
8ee0: 63 61 73 65 20 32 3a 20 2f 2a 20 4f 6e 65 20 61  case 2: /* One a
8ef0: 72 67 75 6d 65 6e 74 2c 20 67 69 76 65 20 69 6e  rgument, give in
8f00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
8f10: 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  the interface */
8f20: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 74 63 6c  ....retval = tcl
8f30: 73 79 73 74 65 6d 5f 69 66 63 6f 6e 66 69 67 5f  system_ifconfig_
8f40: 69 6e 66 6f 28 63 64 2c 20 69 6e 74 65 72 70 2c  info(cd, interp,
8f50: 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 73 6f 63   objc, objv, soc
8f60: 6b 2c 20 73 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b  k, sock_v4, sock
8f70: 5f 76 36 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b  _v6);.....break;
8f80: 0a 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 2f  ...default:..../
8f90: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 6e  * Otherwise, con
8fa0: 66 69 67 75 72 65 20 74 68 65 20 69 6e 74 65 72  figure the inter
8fb0: 61 63 65 20 2a 2f 0a 09 09 09 72 65 74 76 61 6c  ace */....retval
8fc0: 20 3d 20 74 63 6c 73 79 73 74 65 6d 5f 69 66 63   = tclsystem_ifc
8fd0: 6f 6e 66 69 67 5f 63 6f 6e 66 28 63 64 2c 20 69  onfig_conf(cd, i
8fe0: 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a  nterp, objc, obj
8ff0: 76 2c 20 73 6f 63 6b 2c 20 73 6f 63 6b 5f 76 34  v, sock, sock_v4
9000: 2c 20 73 6f 63 6b 5f 76 36 29 3b 0a 0a 09 09 09  , sock_v6);.....
9010: 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 2f 2a 20 43  break;..}.../* C
9020: 6c 65 61 6e 75 70 20 2a 2f 0a 09 69 66 20 28 73  leanup */..if (s
9030: 6f 63 6b 5f 76 34 20 21 3d 20 2d 31 29 20 7b 0a  ock_v4 != -1) {.
9040: 09 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 34 29  ..close(sock_v4)
9050: 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b 5f  ;..}...if (sock_
9060: 76 36 20 21 3d 20 2d 31 29 20 7b 0a 09 09 63 6c  v6 != -1) {...cl
9070: 6f 73 65 28 73 6f 63 6b 5f 76 36 29 3b 0a 09 7d  ose(sock_v6);..}
9080: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c  ...return(retval
9090: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
90a0: 20 74 63 6c 73 79 73 74 65 6d 5f 72 6f 75 74 65   tclsystem_route
90b0: 5f 6c 69 73 74 28 43 6c 69 65 6e 74 44 61 74 61  _list(ClientData
90c0: 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20   cd, Tcl_Interp 
90d0: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
90e0: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  c, Tcl_Obj *CONS
90f0: 54 20 6f 62 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f  T objv[], int so
9100: 63 6b 5f 76 34 2c 20 69 6e 74 20 73 6f 63 6b 5f  ck_v4, int sock_
9110: 76 36 29 20 7b 0a 09 54 63 6c 5f 53 65 74 4f 62  v6) {..Tcl_SetOb
9120: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
9130: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
9140: 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  ("not implemente
9150: 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75  d", -1));...retu
9160: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d  rn(TCL_ERROR);.}
9170: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c  ..static int tcl
9180: 73 79 73 74 65 6d 5f 72 6f 75 74 65 5f 63 6f 6e  system_route_con
9190: 66 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  f(ClientData cd,
91a0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
91b0: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
91c0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
91d0: 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 5f 76  jv[], int sock_v
91e0: 34 2c 20 69 6e 74 20 73 6f 63 6b 5f 76 36 29 20  4, int sock_v6) 
91f0: 7b 0a 09 54 63 6c 5f 57 69 64 65 49 6e 74 20 6f  {..Tcl_WideInt o
9200: 70 74 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 3b 20  ption_val_wide; 
9210: 0a 09 54 63 6c 5f 4f 62 6a 20 2a 6f 70 65 72 61  ..Tcl_Obj *opera
9220: 74 69 6f 6e 5f 6f 62 6a 2c 20 2a 64 65 73 74 5f  tion_obj, *dest_
9230: 6f 62 6a 2c 20 2a 64 65 73 74 6d 61 73 6b 5f 6f  obj, *destmask_o
9240: 62 6a 3b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 6f 70  bj;..Tcl_Obj *op
9250: 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 2c 20 2a  tion_name_obj, *
9260: 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 3b 0a  option_val_obj;.
9270: 09 73 74 72 75 63 74 20 72 74 65 6e 74 72 79 20  .struct rtentry 
9280: 72 6f 75 74 65 3b 0a 09 69 6e 74 20 73 6f 63 6b  route;..int sock
9290: 3b 0a 09 69 6e 74 20 69 6f 63 74 6c 5f 69 64 3b  ;..int ioctl_id;
92a0: 0a 09 69 6e 74 20 74 63 6c 5f 72 65 74 2c 20 69  ..int tcl_ret, i
92b0: 6f 63 74 6c 5f 72 65 74 2c 20 70 61 72 73 65 5f  octl_ret, parse_
92c0: 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20  ret;...if (objc 
92d0: 3c 20 34 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  < 4) {...Tcl_Set
92e0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
92f0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
9300: 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73  bj("wrong # args
9310: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a  : should be \"::
9320: 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a  system::syscall:
9330: 3a 72 6f 75 74 65 20 6f 70 65 72 61 74 69 6f 6e  :route operation
9340: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 65 73   destination des
9350: 74 69 6e 61 74 69 6f 6e 5f 6d 61 73 6b 20 3f 6f  tination_mask ?o
9360: 70 74 69 6f 6e 73 3f 5c 22 22 2c 20 2d 31 29 29  ptions?\"", -1))
9370: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
9380: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20  ERROR);..}.../* 
9390: 43 6c 65 61 72 20 6f 62 6a 65 63 74 20 76 61 6c  Clear object val
93a0: 75 65 73 20 2a 2f 0a 09 6d 65 6d 73 65 74 28 26  ues */..memset(&
93b0: 72 6f 75 74 65 2c 20 30 2c 20 73 69 7a 65 6f 66  route, 0, sizeof
93c0: 28 72 6f 75 74 65 29 29 3b 0a 0a 09 2f 2a 20 44  (route));.../* D
93d0: 65 74 65 72 6d 69 6e 65 20 6f 70 65 72 61 74 69  etermine operati
93e0: 6f 6e 20 2a 2f 0a 09 6f 70 65 72 61 74 69 6f 6e  on */..operation
93f0: 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a  _obj = objv[1];.
9400: 09 73 77 69 74 63 68 20 28 74 63 6c 73 79 73 74  .switch (tclsyst
9410: 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70  em_internal_simp
9420: 6c 65 68 61 73 68 5f 6f 62 6a 28 6f 70 65 72 61  lehash_obj(opera
9430: 74 69 6f 6e 5f 6f 62 6a 29 29 20 7b 0a 09 09 63  tion_obj)) {...c
9440: 61 73 65 20 30 78 31 38 37 32 36 34 3a 20 2f 2a  ase 0x187264: /*
9450: 20 61 64 64 20 2a 2f 0a 09 09 09 69 6f 63 74 6c   add */....ioctl
9460: 5f 69 64 20 3d 20 53 49 4f 43 41 44 44 52 54 3b  _id = SIOCADDRT;
9470: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
9480: 65 20 30 78 31 39 33 32 65 63 3a 20 2f 2a 20 64  e 0x1932ec: /* d
9490: 65 6c 20 2a 2f 0a 09 09 63 61 73 65 20 30 78 35  el */...case 0x5
94a0: 64 39 38 65 39 36 35 3a 20 2f 2a 20 64 65 6c 65  d98e965: /* dele
94b0: 74 65 20 2a 2f 0a 09 09 09 69 6f 63 74 6c 5f 69  te */....ioctl_i
94c0: 64 20 3d 20 53 49 4f 43 44 45 4c 52 54 3b 0a 09  d = SIOCDELRT;..
94d0: 09 09 62 72 65 61 6b 3b 0a 09 09 64 65 66 61 75  ..break;...defau
94e0: 6c 74 3a 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62  lt:....Tcl_SetOb
94f0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
9500: 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 62  Tcl_ObjPrintf("b
9510: 61 64 20 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22  ad option \"%s\"
9520: 3a 20 6d 75 73 74 20 62 65 20 61 64 64 2c 20 6f  : must be add, o
9530: 72 20 64 65 6c 65 74 65 22 2c 20 54 63 6c 5f 47  r delete", Tcl_G
9540: 65 74 53 74 72 69 6e 67 28 6f 70 65 72 61 74 69  etString(operati
9550: 6f 6e 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 72  on_obj)));.....r
9560: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
9570: 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65 74 20 64 65  ;..}.../* Set de
9580: 66 61 75 6c 74 20 66 6c 61 67 73 20 2a 2f 0a 09  fault flags */..
9590: 72 6f 75 74 65 2e 72 74 5f 66 6c 61 67 73 20 3d  route.rt_flags =
95a0: 20 52 54 46 5f 55 50 3b 0a 0a 09 2f 2a 20 50 61   RTF_UP;.../* Pa
95b0: 72 73 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  rse destination 
95c0: 61 64 64 72 65 73 73 20 2a 2f 0a 09 64 65 73 74  address */..dest
95d0: 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a  _obj = objv[2];.
95e0: 09 70 61 72 73 65 5f 72 65 74 20 3d 20 74 63 6c  .parse_ret = tcl
95f0: 73 79 73 74 65 6d 5f 70 72 69 76 61 74 65 5f 67  system_private_g
9600: 65 74 5f 73 6f 63 6b 61 64 64 72 5f 66 72 6f 6d  et_sockaddr_from
9610: 5f 6f 62 6a 28 64 65 73 74 5f 6f 62 6a 2c 20 26  _obj(dest_obj, &
9620: 72 6f 75 74 65 2e 72 74 5f 64 73 74 29 3b 0a 09  route.rt_dst);..
9630: 69 66 20 28 70 61 72 73 65 5f 72 65 74 20 21 3d  if (parse_ret !=
9640: 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f   0) {...Tcl_SetO
9650: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
9660: 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22   Tcl_ObjPrintf("
9670: 75 6e 61 62 6c 65 20 74 6f 20 70 61 72 73 65 20  unable to parse 
9680: 5c 22 25 73 5c 22 20 61 73 20 61 6e 20 61 64 64  \"%s\" as an add
9690: 72 65 73 73 22 2c 20 54 63 6c 5f 47 65 74 53 74  ress", Tcl_GetSt
96a0: 72 69 6e 67 28 64 65 73 74 5f 6f 62 6a 29 29 29  ring(dest_obj)))
96b0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
96c0: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20  ERROR);..}.../* 
96d0: 50 61 72 73 65 20 64 65 73 74 69 6e 61 74 69 6f  Parse destinatio
96e0: 6e 20 6e 65 74 6d 61 73 6b 20 2a 2f 0a 09 64 65  n netmask */..de
96f0: 73 74 6d 61 73 6b 5f 6f 62 6a 20 3d 20 6f 62 6a  stmask_obj = obj
9700: 76 5b 33 5d 3b 0a 09 70 61 72 73 65 5f 72 65 74  v[3];..parse_ret
9710: 20 3d 20 74 63 6c 73 79 73 74 65 6d 5f 70 72 69   = tclsystem_pri
9720: 76 61 74 65 5f 67 65 74 5f 73 6f 63 6b 61 64 64  vate_get_sockadd
9730: 72 5f 66 72 6f 6d 5f 6f 62 6a 28 64 65 73 74 6d  r_from_obj(destm
9740: 61 73 6b 5f 6f 62 6a 2c 20 26 72 6f 75 74 65 2e  ask_obj, &route.
9750: 72 74 5f 67 65 6e 6d 61 73 6b 29 3b 0a 09 69 66  rt_genmask);..if
9760: 20 28 70 61 72 73 65 5f 72 65 74 20 21 3d 20 30   (parse_ret != 0
9770: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
9780: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
9790: 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e  cl_ObjPrintf("un
97a0: 61 62 6c 65 20 74 6f 20 70 61 72 73 65 20 5c 22  able to parse \"
97b0: 25 73 5c 22 20 61 73 20 61 6e 20 61 64 64 72 65  %s\" as an addre
97c0: 73 73 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  ss", Tcl_GetStri
97d0: 6e 67 28 64 65 73 74 6d 61 73 6b 5f 6f 62 6a 29  ng(destmask_obj)
97e0: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  ));....return(TC
97f0: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69  L_ERROR);..}...i
9800: 66 20 28 72 6f 75 74 65 2e 72 74 5f 64 73 74 2e  f (route.rt_dst.
9810: 73 61 5f 66 61 6d 69 6c 79 20 21 3d 20 72 6f 75  sa_family != rou
9820: 74 65 2e 72 74 5f 67 65 6e 6d 61 73 6b 2e 73 61  te.rt_genmask.sa
9830: 5f 66 61 6d 69 6c 79 29 20 7b 0a 09 09 54 63 6c  _family) {...Tcl
9840: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
9850: 74 65 72 70 2c 0a 09 09 20 20 54 63 6c 5f 4f 62  terp,...  Tcl_Ob
9860: 6a 50 72 69 6e 74 66 28 22 64 65 73 74 69 6e 61  jPrintf("destina
9870: 74 69 6f 6e 20 28 5c 22 25 73 5c 22 29 20 61 6e  tion (\"%s\") an
9880: 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 5f 6d 61  d destination_ma
9890: 73 6b 20 28 5c 22 25 73 5c 22 29 20 61 72 65 20  sk (\"%s\") are 
98a0: 64 69 66 66 65 72 65 6e 74 20 63 6c 61 73 73 65  different classe
98b0: 73 22 2c 0a 09 09 20 20 20 20 54 63 6c 5f 47 65  s",...    Tcl_Ge
98c0: 74 53 74 72 69 6e 67 28 64 65 73 74 5f 6f 62 6a  tString(dest_obj
98d0: 29 2c 0a 09 09 20 20 20 20 54 63 6c 5f 47 65 74  ),...    Tcl_Get
98e0: 53 74 72 69 6e 67 28 64 65 73 74 6d 61 73 6b 5f  String(destmask_
98f0: 6f 62 6a 29 0a 09 09 20 20 29 0a 09 09 29 3b 0a  obj)...  )...);.
9900: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
9910: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63  ROR);..}...switc
9920: 68 20 28 72 6f 75 74 65 2e 72 74 5f 64 73 74 2e  h (route.rt_dst.
9930: 73 61 5f 66 61 6d 69 6c 79 29 20 7b 0a 09 09 63  sa_family) {...c
9940: 61 73 65 20 41 46 5f 49 4e 45 54 3a 20 2f 2a 20  ase AF_INET: /* 
9950: 49 50 76 34 20 2a 2f 0a 09 09 09 69 66 20 28 73  IPv4 */....if (s
9960: 6f 63 6b 5f 76 34 20 3d 3d 20 2d 31 29 20 7b 0a  ock_v4 == -1) {.
9970: 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
9980: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
9990: 5f 4f 62 6a 50 72 69 6e 74 66 28 22 61 64 64 72  _ObjPrintf("addr
99a0: 65 73 73 20 5c 22 25 73 5c 22 20 69 73 20 49 50  ess \"%s\" is IP
99b0: 76 34 2c 20 62 75 74 20 75 6e 61 62 6c 65 20 74  v4, but unable t
99c0: 6f 20 63 72 65 61 74 65 20 49 50 76 34 20 73 6f  o create IPv4 so
99d0: 63 6b 65 74 22 2c 20 54 63 6c 5f 47 65 74 53 74  cket", Tcl_GetSt
99e0: 72 69 6e 67 28 64 65 73 74 5f 6f 62 6a 29 29 29  ring(dest_obj)))
99f0: 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54 43  ;......return(TC
9a00: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a  L_ERROR);....}..
9a10: 09 09 09 69 66 20 28 28 28 73 74 72 75 63 74 20  ...if (((struct 
9a20: 73 6f 63 6b 61 64 64 72 5f 69 6e 20 2a 29 20 26  sockaddr_in *) &
9a30: 72 6f 75 74 65 2e 72 74 5f 67 65 6e 6d 61 73 6b  route.rt_genmask
9a40: 29 2d 3e 73 69 6e 5f 61 64 64 72 2e 73 5f 61 64  )->sin_addr.s_ad
9a50: 64 72 20 3d 3d 20 49 4e 41 44 44 52 5f 42 52 4f  dr == INADDR_BRO
9a60: 41 44 43 41 53 54 29 20 7b 0a 09 09 09 09 72 6f  ADCAST) {.....ro
9a70: 75 74 65 2e 72 74 5f 66 6c 61 67 73 20 7c 3d 20  ute.rt_flags |= 
9a80: 52 54 46 5f 48 4f 53 54 3b 0a 09 09 09 7d 0a 0a  RTF_HOST;....}..
9a90: 09 09 09 73 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76  ...sock = sock_v
9aa0: 34 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  4;.....break;...
9ab0: 63 61 73 65 20 41 46 5f 49 4e 45 54 36 3a 20 2f  case AF_INET6: /
9ac0: 2a 20 49 50 76 36 20 2a 2f 0a 09 09 09 69 66 20  * IPv6 */....if 
9ad0: 28 73 6f 63 6b 5f 76 36 20 3d 3d 20 2d 31 29 20  (sock_v6 == -1) 
9ae0: 7b 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a  {.....Tcl_SetObj
9af0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
9b00: 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 61 64  cl_ObjPrintf("ad
9b10: 64 72 65 73 73 20 5c 22 25 73 5c 22 20 69 73 20  dress \"%s\" is 
9b20: 49 50 76 36 2c 20 62 75 74 20 75 6e 61 62 6c 65  IPv6, but unable
9b30: 20 74 6f 20 63 72 65 61 74 65 20 49 50 76 36 20   to create IPv6 
9b40: 73 6f 63 6b 65 74 22 2c 20 54 63 6c 5f 47 65 74  socket", Tcl_Get
9b50: 53 74 72 69 6e 67 28 64 65 73 74 5f 6f 62 6a 29  String(dest_obj)
9b60: 29 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28  ));......return(
9b70: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d  TCL_ERROR);....}
9b80: 0a 0a 09 09 09 73 6f 63 6b 20 3d 20 73 6f 63 6b  .....sock = sock
9b90: 5f 76 36 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a  _v6;.....break;.
9ba0: 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 54 63  ..default:....Tc
9bb0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
9bc0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72  nterp, Tcl_ObjPr
9bd0: 69 6e 74 66 28 22 75 6e 61 62 6c 65 20 74 6f 20  intf("unable to 
9be0: 64 65 74 65 72 6d 69 6e 65 20 74 79 70 65 20 6f  determine type o
9bf0: 66 20 61 64 64 72 65 73 73 20 66 6f 72 20 5c 22  f address for \"
9c00: 25 73 5c 22 22 2c 20 54 63 6c 5f 47 65 74 53 74  %s\"", Tcl_GetSt
9c10: 72 69 6e 67 28 64 65 73 74 5f 6f 62 6a 29 29 29  ring(dest_obj)))
9c20: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ;.....return(TCL
9c30: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a  _ERROR);..}.../*
9c40: 20 50 61 72 73 65 20 72 65 6d 61 69 6e 69 6e 67   Parse remaining
9c50: 20 6f 70 74 69 6f 6e 73 20 2a 2f 0a 09 6f 62 6a   options */..obj
9c60: 63 20 2d 3d 20 34 3b 0a 09 6f 62 6a 76 20 2b 3d  c -= 4;..objv +=
9c70: 20 34 3b 0a 0a 09 66 6f 72 20 28 3b 20 6f 62 6a   4;...for (; obj
9c80: 63 20 3e 20 30 3b 20 6f 62 6a 63 2d 2d 2c 6f 62  c > 0; objc--,ob
9c90: 6a 76 2b 2b 29 20 7b 0a 09 09 6f 70 74 69 6f 6e  jv++) {...option
9ca0: 5f 6e 61 6d 65 5f 6f 62 6a 20 3d 20 6f 62 6a 76  _name_obj = objv
9cb0: 5b 30 5d 3b 0a 0a 09 09 69 66 20 28 6f 62 6a 63  [0];....if (objc
9cc0: 20 3c 20 32 29 20 7b 0a 09 09 09 54 63 6c 5f 53   < 2) {....Tcl_S
9cd0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
9ce0: 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74  rp, Tcl_ObjPrint
9cf0: 66 28 22 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22  f("option \"%s\"
9d00: 20 72 65 71 75 69 72 65 73 20 61 6e 20 61 72 67   requires an arg
9d10: 75 6d 65 6e 74 22 2c 20 54 63 6c 5f 47 65 74 53  ument", Tcl_GetS
9d20: 74 72 69 6e 67 28 6f 70 74 69 6f 6e 5f 6e 61 6d  tring(option_nam
9d30: 65 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 72 65  e_obj)));.....re
9d40: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
9d50: 0a 09 09 7d 0a 0a 09 09 6f 62 6a 63 2d 2d 3b 0a  ...}....objc--;.
9d60: 09 09 6f 62 6a 76 2b 2b 3b 0a 0a 09 09 6f 70 74  ..objv++;....opt
9d70: 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 20 3d 20 6f 62  ion_val_obj = ob
9d80: 6a 76 5b 30 5d 3b 0a 0a 09 09 73 77 69 74 63 68  jv[0];....switch
9d90: 20 28 74 63 6c 73 79 73 74 65 6d 5f 69 6e 74 65   (tclsystem_inte
9da0: 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f  rnal_simplehash_
9db0: 6f 62 6a 28 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f  obj(option_name_
9dc0: 6f 62 6a 29 29 20 7b 0a 09 09 09 63 61 73 65 20  obj)) {....case 
9dd0: 30 78 34 63 37 32 37 37 37 39 3a 20 2f 2a 20 67  0x4c727779: /* g
9de0: 61 74 65 77 61 79 20 2a 2f 0a 09 09 09 09 70 61  ateway */.....pa
9df0: 72 73 65 5f 72 65 74 20 3d 20 74 63 6c 73 79 73  rse_ret = tclsys
9e00: 74 65 6d 5f 70 72 69 76 61 74 65 5f 67 65 74 5f  tem_private_get_
9e10: 73 6f 63 6b 61 64 64 72 5f 66 72 6f 6d 5f 6f 62  sockaddr_from_ob
9e20: 6a 28 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a  j(option_val_obj
9e30: 2c 20 26 72 6f 75 74 65 2e 72 74 5f 67 61 74 65  , &route.rt_gate
9e40: 77 61 79 29 3b 0a 09 09 09 09 69 66 20 28 70 61  way);.....if (pa
9e50: 72 73 65 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  rse_ret != 0) {.
9e60: 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  .....Tcl_SetObjR
9e70: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
9e80: 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e 61  l_ObjPrintf("una
9e90: 62 6c 65 20 74 6f 20 70 61 72 73 65 20 5c 22 25  ble to parse \"%
9ea0: 73 5c 22 20 61 73 20 61 6e 20 61 64 64 72 65 73  s\" as an addres
9eb0: 73 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  s", Tcl_GetStrin
9ec0: 67 28 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a  g(option_val_obj
9ed0: 29 29 29 3b 0a 0a 09 09 09 09 09 72 65 74 75 72  )));.......retur
9ee0: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09  n(TCL_ERROR);...
9ef0: 09 09 7d 0a 0a 09 09 09 09 72 6f 75 74 65 2e 72  ..}......route.r
9f00: 74 5f 66 6c 61 67 73 20 26 3d 20 28 7e 52 54 46  t_flags &= (~RTF
9f10: 5f 48 4f 53 54 29 3b 0a 09 09 09 09 72 6f 75 74  _HOST);.....rout
9f20: 65 2e 72 74 5f 66 6c 61 67 73 20 7c 3d 20 52 54  e.rt_flags |= RT
9f30: 46 5f 47 41 54 45 57 41 59 3b 0a 0a 09 09 09 09  F_GATEWAY;......
9f40: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
9f50: 78 31 62 37 61 37 35 3a 20 2f 2a 20 6d 74 75 20  x1b7a75: /* mtu 
9f60: 2a 2f 0a 09 09 09 09 74 63 6c 5f 72 65 74 20 3d  */.....tcl_ret =
9f70: 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46   Tcl_GetWideIntF
9f80: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
9f90: 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 2c 20 26  ption_val_obj, &
9fa0: 6f 70 74 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 29  option_val_wide)
9fb0: 3b 0a 09 09 09 09 69 66 20 28 74 63 6c 5f 72 65  ;.....if (tcl_re
9fc0: 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09  t != TCL_OK) {..
9fd0: 09 09 09 09 72 65 74 75 72 6e 28 74 63 6c 5f 72  ....return(tcl_r
9fe0: 65 74 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09  et);.....}......
9ff0: 72 6f 75 74 65 2e 72 74 5f 66 6c 61 67 73 20 7c  route.rt_flags |
a000: 3d 20 52 54 46 5f 4d 54 55 3b 0a 09 09 09 09 72  = RTF_MTU;.....r
a010: 6f 75 74 65 2e 72 74 5f 6d 74 75 20 3d 20 6f 70  oute.rt_mtu = op
a020: 74 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 3b 0a 0a  tion_val_wide;..
a030: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
a040: 73 65 20 30 78 35 65 39 64 30 33 65 33 3a 20 2f  se 0x5e9d03e3: /
a050: 2a 20 6d 65 74 72 69 63 20 2a 2f 0a 09 09 09 09  * metric */.....
a060: 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65  tcl_ret = Tcl_Ge
a070: 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28  tWideIntFromObj(
a080: 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e 5f 76  interp, option_v
a090: 61 6c 5f 6f 62 6a 2c 20 26 6f 70 74 69 6f 6e 5f  al_obj, &option_
a0a0: 76 61 6c 5f 77 69 64 65 29 3b 0a 09 09 09 09 69  val_wide);.....i
a0b0: 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43  f (tcl_ret != TC
a0c0: 4c 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 72 65 74  L_OK) {......ret
a0d0: 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09 09  urn(tcl_ret);...
a0e0: 09 09 7d 0a 0a 09 09 09 09 72 6f 75 74 65 2e 72  ..}......route.r
a0f0: 74 5f 6d 65 74 72 69 63 20 3d 20 6f 70 74 69 6f  t_metric = optio
a100: 6e 5f 76 61 6c 5f 77 69 64 65 3b 0a 0a 09 09 09  n_val_wide;.....
a110: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
a120: 30 78 39 64 64 38 65 38 66 37 3a 20 2f 2a 20 77  0x9dd8e8f7: /* w
a130: 69 6e 64 6f 77 20 2a 2f 0a 09 09 09 09 74 63 6c  indow */.....tcl
a140: 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69  _ret = Tcl_GetWi
a150: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
a160: 65 72 70 2c 20 6f 70 74 69 6f 6e 5f 76 61 6c 5f  erp, option_val_
a170: 6f 62 6a 2c 20 26 6f 70 74 69 6f 6e 5f 76 61 6c  obj, &option_val
a180: 5f 77 69 64 65 29 3b 0a 09 09 09 09 69 66 20 28  _wide);.....if (
a190: 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f  tcl_ret != TCL_O
a1a0: 4b 29 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  K) {......return
a1b0: 28 74 63 6c 5f 72 65 74 29 3b 0a 09 09 09 09 7d  (tcl_ret);.....}
a1c0: 0a 0a 09 09 09 09 72 6f 75 74 65 2e 72 74 5f 66  ......route.rt_f
a1d0: 6c 61 67 73 20 7c 3d 20 52 54 46 5f 57 49 4e 44  lags |= RTF_WIND
a1e0: 4f 57 3b 0a 09 09 09 09 72 6f 75 74 65 2e 72 74  OW;.....route.rt
a1f0: 5f 77 69 6e 64 6f 77 20 3d 20 6f 70 74 69 6f 6e  _window = option
a200: 5f 76 61 6c 5f 77 69 64 65 3b 0a 0a 09 09 09 09  _val_wide;......
a210: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
a220: 78 31 39 33 32 66 36 3a 20 2f 2a 20 64 65 76 20  x1932f6: /* dev 
a230: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 35 65 64  */....case 0x5ed
a240: 62 65 32 65 35 3a 20 2f 2a 20 64 65 76 69 63 65  be2e5: /* device
a250: 20 2a 2f 0a 09 09 09 09 72 6f 75 74 65 2e 72 74   */.....route.rt
a260: 5f 64 65 76 20 3d 20 73 74 72 64 75 70 28 54 63  _dev = strdup(Tc
a270: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70 74 69  l_GetString(opti
a280: 6f 6e 5f 76 61 6c 5f 6f 62 6a 29 29 3b 0a 0a 09  on_val_obj));...
a290: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64 65 66  ...break;....def
a2a0: 61 75 6c 74 3a 0a 09 09 09 09 54 63 6c 5f 53 65  ault:.....Tcl_Se
a2b0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
a2c0: 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66  p, Tcl_ObjPrintf
a2d0: 28 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22 25  ("bad option \"%
a2e0: 73 5c 22 3a 20 6d 75 73 74 20 62 65 20 67 61 74  s\": must be gat
a2f0: 65 77 61 79 2c 20 6d 74 75 2c 20 6d 65 74 72 69  eway, mtu, metri
a300: 63 2c 20 64 65 76 69 63 65 2c 20 6f 72 20 77 69  c, device, or wi
a310: 6e 64 6f 77 22 2c 20 54 63 6c 5f 47 65 74 53 74  ndow", Tcl_GetSt
a320: 72 69 6e 67 28 6f 70 74 69 6f 6e 5f 6e 61 6d 65  ring(option_name
a330: 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 09 72 65  _obj)));......re
a340: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
a350: 0a 09 09 7d 0a 09 7d 0a 0a 09 2f 2a 20 52 65 71  ...}..}.../* Req
a360: 75 65 73 74 20 72 6f 75 74 65 20 63 68 61 6e 67  uest route chang
a370: 65 20 2a 2f 0a 09 69 6f 63 74 6c 5f 72 65 74 20  e */..ioctl_ret 
a380: 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 69 6f  = ioctl(sock, io
a390: 63 74 6c 5f 69 64 2c 20 26 72 6f 75 74 65 29 3b  ctl_id, &route);
a3a0: 0a 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74 20  ..if (ioctl_ret 
a3b0: 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65  != 0) {...Tcl_Se
a3c0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
a3d0: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
a3e0: 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72  Obj(strerror(err
a3f0: 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65  no), -1));....re
a400: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
a410: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c  ..}...return(TCL
a420: 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  _OK);.}..static 
a430: 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f 72 6f  int tclsystem_ro
a440: 75 74 65 28 43 6c 69 65 6e 74 44 61 74 61 20 63  ute(ClientData c
a450: 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
a460: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
a470: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
a480: 6f 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e 74 20 73  objv[]) {..int s
a490: 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 2c  ock_v4, sock_v6,
a4a0: 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 72 65 74 76   sock;..int retv
a4b0: 61 6c 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  al = TCL_ERROR;.
a4c0: 0a 09 73 6f 63 6b 20 3d 20 74 63 6c 73 79 73 74  ..sock = tclsyst
a4d0: 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 67 65 74 73  em_internal_gets
a4e0: 6f 63 6b 28 26 73 6f 63 6b 5f 76 34 2c 20 26 73  ock(&sock_v4, &s
a4f0: 6f 63 6b 5f 76 36 29 3b 0a 09 69 66 20 28 73 6f  ock_v6);..if (so
a500: 63 6b 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 54 63  ck == -1) {...Tc
a510: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
a520: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
a530: 72 69 6e 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20  ringObj("unable 
a540: 74 6f 20 63 72 65 61 74 65 20 73 6f 63 6b 65 74  to create socket
a550: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
a560: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
a570: 7d 0a 0a 09 73 77 69 74 63 68 20 28 6f 62 6a 63  }...switch (objc
a580: 29 20 7b 0a 09 09 63 61 73 65 20 30 3a 0a 09 09  ) {...case 0:...
a590: 63 61 73 65 20 31 3a 20 2f 2a 20 4e 6f 20 61 72  case 1: /* No ar
a5a0: 67 75 6d 65 6e 74 73 2c 20 6c 69 73 74 20 61 6c  guments, list al
a5b0: 6c 20 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a  l interfaces */.
a5c0: 09 09 09 72 65 74 76 61 6c 20 3d 20 74 63 6c 73  ...retval = tcls
a5d0: 79 73 74 65 6d 5f 72 6f 75 74 65 5f 6c 69 73 74  ystem_route_list
a5e0: 28 63 64 2c 20 69 6e 74 65 72 70 2c 20 6f 62 6a  (cd, interp, obj
a5f0: 63 2c 20 6f 62 6a 76 2c 20 73 6f 63 6b 5f 76 34  c, objv, sock_v4
a600: 2c 20 73 6f 63 6b 5f 76 36 29 3b 0a 0a 09 09 09  , sock_v6);.....
a610: 62 72 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c 74  break;...default
a620: 3a 0a 09 09 09 2f 2a 20 4f 74 68 65 72 77 69 73  :..../* Otherwis
a630: 65 2c 20 6d 6f 64 69 66 79 20 72 6f 75 74 65 73  e, modify routes
a640: 20 2a 2f 0a 09 09 09 72 65 74 76 61 6c 20 3d 20   */....retval = 
a650: 74 63 6c 73 79 73 74 65 6d 5f 72 6f 75 74 65 5f  tclsystem_route_
a660: 63 6f 6e 66 28 63 64 2c 20 69 6e 74 65 72 70 2c  conf(cd, interp,
a670: 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 73 6f 63   objc, objv, soc
a680: 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 29 3b 0a  k_v4, sock_v6);.
a690: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09  ....break;..}...
a6a0: 2f 2a 20 43 6c 65 61 6e 75 70 20 2a 2f 0a 09 69  /* Cleanup */..i
a6b0: 66 20 28 73 6f 63 6b 5f 76 34 20 21 3d 20 2d 31  f (sock_v4 != -1
a6c0: 29 20 7b 0a 09 09 63 6c 6f 73 65 28 73 6f 63 6b  ) {...close(sock
a6d0: 5f 76 34 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73  _v4);..}...if (s
a6e0: 6f 63 6b 5f 76 36 20 21 3d 20 2d 31 29 20 7b 0a  ock_v6 != -1) {.
a6f0: 09 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 36 29  ..close(sock_v6)
a700: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65  ;..}...return(re
a710: 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  tval);.}..static
a720: 20 69 6e 74 20 74 63 6c 73 79 73 74 65 6d 5f 62   int tclsystem_b
a730: 72 63 74 6c 5f 6c 69 73 74 28 43 6c 69 65 6e 74  rctl_list(Client
a740: 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74  Data cd, Tcl_Int
a750: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
a760: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a   objc, Tcl_Obj *
a770: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 2c 20 69 6e  CONST objv[], in
a780: 74 20 73 6f 63 6b 29 20 7b 0a 09 54 63 6c 5f 53  t sock) {..Tcl_S
a790: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
a7a0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
a7b0: 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65 6d  gObj("not implem
a7c0: 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09  ented", -1));...
a7d0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
a7e0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
a7f0: 20 74 63 6c 73 79 73 74 65 6d 5f 62 72 63 74 6c   tclsystem_brctl
a800: 5f 63 6f 6e 66 28 43 6c 69 65 6e 74 44 61 74 61  _conf(ClientData
a810: 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20   cd, Tcl_Interp 
a820: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
a830: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  c, Tcl_Obj *CONS
a840: 54 20 6f 62 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f  T objv[], int so
a850: 63 6b 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a  ck) {..Tcl_Obj *
a860: 6f 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 2c 20 2a  operation_obj, *
a870: 62 72 69 64 67 65 5f 6e 61 6d 65 5f 6f 62 6a 2c  bridge_name_obj,
a880: 20 2a 69 6e 74 65 72 66 61 63 65 5f 6e 61 6d 65   *interface_name
a890: 5f 6f 62 6a 3b 0a 09 75 6e 73 69 67 6e 65 64 20  _obj;..unsigned 
a8a0: 6c 6f 6e 67 20 61 72 67 5b 34 5d 3b 0a 09 73 74  long arg[4];..st
a8b0: 72 75 63 74 20 69 66 72 65 71 20 69 66 72 3b 0a  ruct ifreq ifr;.
a8c0: 09 69 6e 74 20 69 6f 63 74 6c 5f 72 65 74 2c 20  .int ioctl_ret, 
a8d0: 69 6f 63 74 6c 5f 69 64 3b 0a 09 69 6e 74 20 61  ioctl_id;..int a
a8e0: 64 64 20 3d 20 30 3b 0a 0a 09 2f 2a 20 44 65 74  dd = 0;.../* Det
a8f0: 65 72 6d 69 6e 65 20 6f 70 65 72 61 74 69 6f 6e  ermine operation
a900: 20 2a 2f 0a 09 6f 70 65 72 61 74 69 6f 6e 5f 6f   */..operation_o
a910: 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a 09 73  bj = objv[1];..s
a920: 77 69 74 63 68 20 28 74 63 6c 73 79 73 74 65 6d  witch (tclsystem
a930: 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65  _internal_simple
a940: 68 61 73 68 5f 6f 62 6a 28 6f 70 65 72 61 74 69  hash_obj(operati
a950: 6f 6e 5f 6f 62 6a 29 29 20 7b 0a 09 09 63 61 73  on_obj)) {...cas
a960: 65 20 30 78 31 63 39 39 33 32 37 32 3a 20 2f 2a  e 0x1c993272: /*
a970: 20 61 64 64 62 72 20 2a 2f 0a 09 09 09 61 64 64   addbr */....add
a980: 20 3d 20 31 3b 0a 09 09 63 61 73 65 20 30 78 34   = 1;...case 0x4
a990: 63 62 62 33 32 37 32 3a 20 2f 2a 20 64 65 6c 62  cbb3272: /* delb
a9a0: 72 20 2a 2f 0a 09 09 09 69 66 20 28 6f 62 6a 63  r */....if (objc
a9b0: 20 21 3d 20 33 29 20 7b 0a 09 09 09 09 69 66 20   != 3) {.....if 
a9c0: 28 61 64 64 29 20 7b 0a 09 09 09 09 09 54 63 6c  (add) {......Tcl
a9d0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
a9e0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
a9f0: 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20  ingObj("wrong # 
aa00: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
aa10: 5c 22 3a 3a 73 79 73 74 65 6d 3a 3a 73 79 73 63  \"::system::sysc
aa20: 61 6c 6c 3a 3a 62 72 63 74 6c 20 61 64 64 62 72  all::brctl addbr
aa30: 20 62 72 69 64 67 65 5c 22 22 2c 20 2d 31 29 29   bridge\"", -1))
aa40: 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ;.....} else {..
aa50: 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
aa60: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
aa70: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77  _NewStringObj("w
aa80: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
aa90: 75 6c 64 20 62 65 20 5c 22 3a 3a 73 79 73 74 65  uld be \"::syste
aaa0: 6d 3a 3a 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74  m::syscall::brct
aab0: 6c 20 64 65 6c 62 72 20 62 72 69 64 67 65 5c 22  l delbr bridge\"
aac0: 22 2c 20 2d 31 29 29 3b 0a 09 09 09 09 7d 0a 0a  ", -1));.....}..
aad0: 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
aae0: 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09  RROR);....}.....
aaf0: 62 72 69 64 67 65 5f 6e 61 6d 65 5f 6f 62 6a 20  bridge_name_obj 
ab00: 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 0a 09 09 09 69  = objv[2];.....i
ab10: 66 20 28 61 64 64 29 20 7b 0a 09 09 09 09 61 72  f (add) {.....ar
ab20: 67 5b 30 5d 20 3d 20 42 52 43 54 4c 5f 41 44 44  g[0] = BRCTL_ADD
ab30: 5f 42 52 49 44 47 45 3b 0a 09 09 09 7d 20 65 6c  _BRIDGE;....} el
ab40: 73 65 20 7b 0a 09 09 09 09 61 72 67 5b 30 5d 20  se {.....arg[0] 
ab50: 3d 20 42 52 43 54 4c 5f 44 45 4c 5f 42 52 49 44  = BRCTL_DEL_BRID
ab60: 47 45 3b 0a 09 09 09 7d 0a 0a 09 09 09 61 72 67  GE;....}.....arg
ab70: 5b 31 5d 20 3d 20 28 75 6e 73 69 67 6e 65 64 20  [1] = (unsigned 
ab80: 6c 6f 6e 67 29 20 54 63 6c 5f 47 65 74 53 74 72  long) Tcl_GetStr
ab90: 69 6e 67 28 62 72 69 64 67 65 5f 6e 61 6d 65 5f  ing(bridge_name_
aba0: 6f 62 6a 29 3b 0a 09 09 09 61 72 67 5b 32 5d 20  obj);....arg[2] 
abb0: 3d 20 30 3b 0a 0a 09 09 09 69 6f 63 74 6c 5f 72  = 0;.....ioctl_r
abc0: 65 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c  et = ioctl(sock,
abd0: 20 53 49 4f 43 47 49 46 42 52 2c 20 26 61 72 67   SIOCGIFBR, &arg
abe0: 29 3b 20 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09  ); .....break;..
abf0: 09 63 61 73 65 20 30 78 31 43 39 39 33 37 45 36  .case 0x1C9937E6
ac00: 3a 20 2f 2a 20 61 64 64 69 66 20 2a 2f 0a 09 09  : /* addif */...
ac10: 09 61 64 64 20 3d 20 31 3b 0a 09 09 63 61 73 65  .add = 1;...case
ac20: 20 30 78 34 63 62 62 33 37 65 36 3a 20 2f 2a 20   0x4cbb37e6: /* 
ac30: 64 65 6c 69 66 20 2a 2f 0a 09 09 09 69 66 20 28  delif */....if (
ac40: 6f 62 6a 63 20 21 3d 20 34 29 20 7b 0a 09 09 09  objc != 4) {....
ac50: 09 69 66 20 28 61 64 64 29 20 7b 0a 09 09 09 09  .if (add) {.....
ac60: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
ac70: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
ac80: 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e  wStringObj("wron
ac90: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
aca0: 20 62 65 20 5c 22 3a 3a 73 79 73 74 65 6d 3a 3a   be \"::system::
acb0: 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74 6c 20 61  syscall::brctl a
acc0: 64 64 69 66 20 62 72 69 64 67 65 20 69 6e 74 65  ddif bridge inte
acd0: 72 66 61 63 65 5c 22 22 2c 20 2d 31 29 29 3b 0a  rface\"", -1));.
ace0: 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
acf0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
ad00: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
ad10: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
ad20: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
ad30: 64 20 62 65 20 5c 22 3a 3a 73 79 73 74 65 6d 3a  d be \"::system:
ad40: 3a 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74 6c 20  :syscall::brctl 
ad50: 64 65 6c 69 66 20 62 72 69 64 67 65 20 69 6e 74  delif bridge int
ad60: 65 72 66 61 63 65 5c 22 22 2c 20 2d 31 29 29 3b  erface\"", -1));
ad70: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 72 65 74 75  .....}......retu
ad80: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
ad90: 09 09 7d 0a 0a 09 09 09 69 66 20 28 61 64 64 29  ..}.....if (add)
ada0: 20 7b 0a 09 09 09 09 69 6f 63 74 6c 5f 69 64 20   {.....ioctl_id 
adb0: 3d 20 53 49 4f 43 42 52 41 44 44 49 46 3b 0a 09  = SIOCBRADDIF;..
adc0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 69  ..} else {.....i
add0: 6f 63 74 6c 5f 69 64 20 3d 20 53 49 4f 43 42 52  octl_id = SIOCBR
ade0: 44 45 4c 49 46 3b 0a 09 09 09 7d 0a 0a 09 09 09  DELIF;....}.....
adf0: 62 72 69 64 67 65 5f 6e 61 6d 65 5f 6f 62 6a 20  bridge_name_obj 
ae00: 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 09 09 09 69 6e  = objv[2];....in
ae10: 74 65 72 66 61 63 65 5f 6e 61 6d 65 5f 6f 62 6a  terface_name_obj
ae20: 20 3d 20 6f 62 6a 76 5b 33 5d 3b 0a 0a 09 09 09   = objv[3];.....
ae30: 6d 65 6d 73 65 74 28 26 69 66 72 2c 20 30 2c 20  memset(&ifr, 0, 
ae40: 73 69 7a 65 6f 66 28 69 66 72 29 29 3b 0a 09 09  sizeof(ifr));...
ae50: 09 73 6e 70 72 69 6e 74 66 28 69 66 72 2e 69 66  .snprintf(ifr.if
ae60: 72 5f 6e 61 6d 65 2c 20 49 46 4e 41 4d 53 49 5a  r_name, IFNAMSIZ
ae70: 2c 20 22 25 73 22 2c 20 54 63 6c 5f 47 65 74 53  , "%s", Tcl_GetS
ae80: 74 72 69 6e 67 28 69 6e 74 65 72 66 61 63 65 5f  tring(interface_
ae90: 6e 61 6d 65 5f 6f 62 6a 29 29 3b 0a 0a 09 09 09  name_obj));.....
aea0: 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74  ioctl_ret = ioct
aeb0: 6c 28 73 6f 63 6b 2c 20 53 49 4f 43 47 49 46 49  l(sock, SIOCGIFI
aec0: 4e 44 45 58 2c 20 28 76 6f 69 64 20 2a 29 20 26  NDEX, (void *) &
aed0: 69 66 72 29 3b 0a 09 09 09 69 66 20 28 69 6f 63  ifr);....if (ioc
aee0: 74 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09  tl_ret == 0) {..
aef0: 09 09 09 73 6e 70 72 69 6e 74 66 28 69 66 72 2e  ...snprintf(ifr.
af00: 69 66 72 5f 6e 61 6d 65 2c 20 49 46 4e 41 4d 53  ifr_name, IFNAMS
af10: 49 5a 2c 20 22 25 73 22 2c 20 54 63 6c 5f 47 65  IZ, "%s", Tcl_Ge
af20: 74 53 74 72 69 6e 67 28 62 72 69 64 67 65 5f 6e  tString(bridge_n
af30: 61 6d 65 5f 6f 62 6a 29 29 3b 0a 09 09 09 09 69  ame_obj));.....i
af40: 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c  octl_ret = ioctl
af50: 28 73 6f 63 6b 2c 20 69 6f 63 74 6c 5f 69 64 2c  (sock, ioctl_id,
af60: 20 28 76 6f 69 64 20 2a 29 20 26 69 66 72 29 3b   (void *) &ifr);
af70: 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b  ....}.....break;
af80: 0a 09 7d 0a 0a 09 69 66 20 28 69 6f 63 74 6c 5f  ..}...if (ioctl_
af90: 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 54 63 6c  ret < 0) {...Tcl
afa0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
afb0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
afc0: 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28  ingObj(strerror(
afd0: 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09  errno), -1));...
afe0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
aff0: 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28  R);..}...return(
b000: 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74  TCL_OK);.}..stat
b010: 69 63 20 69 6e 74 20 74 63 6c 73 79 73 74 65 6d  ic int tclsystem
b020: 5f 62 72 63 74 6c 28 43 6c 69 65 6e 74 44 61 74  _brctl(ClientDat
b030: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
b040: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
b050: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
b060: 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e  ST objv[]) {..in
b070: 74 20 73 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f  t sock_v4, sock_
b080: 76 36 2c 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 72  v6, sock;..int r
b090: 65 74 76 61 6c 20 3d 20 54 43 4c 5f 45 52 52 4f  etval = TCL_ERRO
b0a0: 52 3b 0a 0a 09 73 6f 63 6b 20 3d 20 74 63 6c 73  R;...sock = tcls
b0b0: 79 73 74 65 6d 5f 69 6e 74 65 72 6e 61 6c 5f 67  ystem_internal_g
b0c0: 65 74 73 6f 63 6b 28 26 73 6f 63 6b 5f 76 34 2c  etsock(&sock_v4,
b0d0: 20 26 73 6f 63 6b 5f 76 36 29 3b 0a 09 69 66 20   &sock_v6);..if 
b0e0: 28 73 6f 63 6b 20 3d 3d 20 2d 31 29 20 7b 0a 09  (sock == -1) {..
b0f0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
b100: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
b110: 77 53 74 72 69 6e 67 4f 62 6a 28 22 75 6e 61 62  wStringObj("unab
b120: 6c 65 20 74 6f 20 63 72 65 61 74 65 20 73 6f 63  le to create soc
b130: 6b 65 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  ket", -1));....r
b140: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
b150: 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 6f  ;..}...switch (o
b160: 62 6a 63 29 20 7b 0a 09 09 63 61 73 65 20 30 3a  bjc) {...case 0:
b170: 0a 09 09 63 61 73 65 20 31 3a 20 2f 2a 20 4e 6f  ...case 1: /* No
b180: 20 61 72 67 75 6d 65 6e 74 73 2c 20 6c 69 73 74   arguments, list
b190: 20 61 6c 6c 20 62 72 69 64 67 65 73 20 2a 2f 0a   all bridges */.
b1a0: 09 09 09 72 65 74 76 61 6c 20 3d 20 74 63 6c 73  ...retval = tcls
b1b0: 79 73 74 65 6d 5f 62 72 63 74 6c 5f 6c 69 73 74  ystem_brctl_list
b1c0: 28 63 64 2c 20 69 6e 74 65 72 70 2c 20 6f 62 6a  (cd, interp, obj
b1d0: 63 2c 20 6f 62 6a 76 2c 20 73 6f 63 6b 29 3b 0a  c, objv, sock);.
b1e0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 64 65 66  ....break;...def
b1f0: 61 75 6c 74 3a 0a 09 09 09 2f 2a 20 4f 74 68 65  ault:..../* Othe
b200: 72 77 69 73 65 2c 20 6d 6f 64 69 66 79 20 72 6f  rwise, modify ro
b210: 75 74 65 73 20 2a 2f 0a 09 09 09 72 65 74 76 61  utes */....retva
b220: 6c 20 3d 20 74 63 6c 73 79 73 74 65 6d 5f 62 72  l = tclsystem_br
b230: 63 74 6c 5f 63 6f 6e 66 28 63 64 2c 20 69 6e 74  ctl_conf(cd, int
b240: 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c  erp, objc, objv,
b250: 20 73 6f 63 6b 29 3b 0a 0a 09 09 09 62 72 65 61   sock);.....brea
b260: 6b 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6c 65 61 6e  k;..}.../* Clean
b270: 75 70 20 2a 2f 0a 09 69 66 20 28 73 6f 63 6b 5f  up */..if (sock_
b280: 76 34 20 21 3d 20 2d 31 29 20 7b 0a 09 09 63 6c  v4 != -1) {...cl
b290: 6f 73 65 28 73 6f 63 6b 5f 76 34 29 3b 0a 09 7d  ose(sock_v4);..}
b2a0: 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76 36 20 21  ...if (sock_v6 !
b2b0: 3d 20 2d 31 29 20 7b 0a 09 09 63 6c 6f 73 65 28  = -1) {...close(
b2c0: 73 6f 63 6b 5f 76 36 29 3b 0a 09 7d 0a 0a 09 72  sock_v6);..}...r
b2d0: 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d  eturn(retval);.}
b2e0: 0a 0a 69 6e 74 20 53 79 73 74 65 6d 5f 49 6e 69  ..int System_Ini
b2f0: 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  t(Tcl_Interp *in
b300: 74 65 72 70 29 20 7b 0a 23 69 66 64 65 66 20 55  terp) {.#ifdef U
b310: 53 45 5f 54 43 4c 5f 53 54 55 42 53 0a 09 63 6f  SE_TCL_STUBS..co
b320: 6e 73 74 20 63 68 61 72 20 2a 74 63 6c 49 6e 69  nst char *tclIni
b330: 74 53 74 75 62 73 5f 72 65 74 3b 0a 0a 09 2f 2a  tStubs_ret;.../*
b340: 20 49 6e 69 74 69 61 6c 69 7a 65 20 53 74 75 62   Initialize Stub
b350: 73 20 2a 2f 0a 09 74 63 6c 49 6e 69 74 53 74 75  s */..tclInitStu
b360: 62 73 5f 72 65 74 20 3d 20 54 63 6c 5f 49 6e 69  bs_ret = Tcl_Ini
b370: 74 53 74 75 62 73 28 69 6e 74 65 72 70 2c 20 22  tStubs(interp, "
b380: 38 2e 34 22 2c 20 30 29 3b 0a 09 69 66 20 28 21  8.4", 0);..if (!
b390: 74 63 6c 49 6e 69 74 53 74 75 62 73 5f 72 65 74  tclInitStubs_ret
b3a0: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  ) {...return(TCL
b3b0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 23 65 6e 64  _ERROR);..}.#end
b3c0: 69 66 0a 0a 09 2f 2a 20 4b 65 72 6e 65 6c 20 6d  if.../* Kernel m
b3d0: 61 69 6e 74 65 6e 61 6e 63 65 20 72 65 6c 61 74  aintenance relat
b3e0: 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 09  ed commands */..
b3f0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
b400: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
b410: 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a  system::syscall:
b420: 3a 69 6e 73 6d 6f 64 22 2c 20 74 63 6c 73 79 73  :insmod", tclsys
b430: 74 65 6d 5f 69 6e 73 6d 6f 64 2c 20 4e 55 4c 4c  tem_insmod, NULL
b440: 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72  , NULL);..Tcl_Cr
b450: 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
b460: 6e 74 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d  nterp, "::system
b470: 3a 3a 73 79 73 63 61 6c 6c 3a 3a 72 6d 6d 6f 64  ::syscall::rmmod
b480: 22 2c 20 74 63 6c 73 79 73 74 65 6d 5f 72 6d 6d  ", tclsystem_rmm
b490: 6f 64 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b  od, NULL, NULL);
b4a0: 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43  ..Tcl_CreateObjC
b4b0: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22  ommand(interp, "
b4c0: 3a 3a 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c  ::system::syscal
b4d0: 6c 3a 3a 6c 73 6d 6f 64 22 2c 20 74 63 6c 73 79  l::lsmod", tclsy
b4e0: 73 74 65 6d 5f 6c 73 6d 6f 64 2c 20 4e 55 4c 4c  stem_lsmod, NULL
b4f0: 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72  , NULL);..Tcl_Cr
b500: 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
b510: 6e 74 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d  nterp, "::system
b520: 3a 3a 73 79 73 63 61 6c 6c 3a 3a 68 6f 73 74 6e  ::syscall::hostn
b530: 61 6d 65 22 2c 20 74 63 6c 73 79 73 74 65 6d 5f  ame", tclsystem_
b540: 68 6f 73 74 6e 61 6d 65 2c 20 4e 55 4c 4c 2c 20  hostname, NULL, 
b550: 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
b560: 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
b570: 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d 3a 3a  erp, "::system::
b580: 73 79 73 63 61 6c 6c 3a 3a 64 6f 6d 61 69 6e 6e  syscall::domainn
b590: 61 6d 65 22 2c 20 74 63 6c 73 79 73 74 65 6d 5f  ame", tclsystem_
b5a0: 64 6f 6d 61 69 6e 6e 61 6d 65 2c 20 4e 55 4c 4c  domainname, NULL
b5b0: 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 20 42 6c  , NULL);.../* Bl
b5c0: 6f 63 6b 20 6f 72 20 63 68 61 72 20 64 65 76 69  ock or char devi
b5d0: 63 65 20 72 65 6c 61 74 65 64 20 63 6f 6d 6d 61  ce related comma
b5e0: 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f 43 72 65 61  nds */..Tcl_Crea
b5f0: 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
b600: 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d 3a 3a  erp, "::system::
b610: 73 79 73 63 61 6c 6c 3a 3a 6c 6f 73 65 74 75 70  syscall::losetup
b620: 22 2c 20 74 63 6c 73 79 73 74 65 6d 5f 6c 6f 73  ", tclsystem_los
b630: 65 74 75 70 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  etup, NULL, NULL
b640: 29 3b 0a 0a 09 2f 2a 20 46 69 6c 65 73 79 73 74  );.../* Filesyst
b650: 65 6d 20 72 65 6c 61 74 65 64 20 63 6f 6d 6d 61  em related comma
b660: 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f 43 72 65 61  nds */..Tcl_Crea
b670: 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
b680: 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d 3a 3a  erp, "::system::
b690: 73 79 73 63 61 6c 6c 3a 3a 6d 6f 75 6e 74 22 2c  syscall::mount",
b6a0: 20 74 63 6c 73 79 73 74 65 6d 5f 6d 6f 75 6e 74   tclsystem_mount
b6b0: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09  , NULL, NULL);..
b6c0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
b6d0: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
b6e0: 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a  system::syscall:
b6f0: 3a 75 6d 6f 75 6e 74 22 2c 20 74 63 6c 73 79 73  :umount", tclsys
b700: 74 65 6d 5f 75 6d 6f 75 6e 74 2c 20 4e 55 4c 4c  tem_umount, NULL
b710: 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72  , NULL);..Tcl_Cr
b720: 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
b730: 6e 74 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d  nterp, "::system
b740: 3a 3a 73 79 73 63 61 6c 6c 3a 3a 73 77 61 70 6f  ::syscall::swapo
b750: 6e 22 2c 20 74 63 6c 73 79 73 74 65 6d 5f 73 77  n", tclsystem_sw
b760: 61 70 6f 6e 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  apon, NULL, NULL
b770: 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62  );..Tcl_CreateOb
b780: 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
b790: 20 22 3a 3a 73 79 73 74 65 6d 3a 3a 73 79 73 63   "::system::sysc
b7a0: 61 6c 6c 3a 3a 73 77 61 70 6f 66 66 22 2c 20 74  all::swapoff", t
b7b0: 63 6c 73 79 73 74 65 6d 5f 73 77 61 70 6f 66 66  clsystem_swapoff
b7c0: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09  , NULL, NULL);..
b7d0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
b7e0: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
b7f0: 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a  system::syscall:
b800: 3a 6d 6b 6e 6f 64 22 2c 20 74 63 6c 73 79 73 74  :mknod", tclsyst
b810: 65 6d 5f 6d 6b 6e 6f 64 2c 20 4e 55 4c 4c 2c 20  em_mknod, NULL, 
b820: 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 20 50 72 6f 63  NULL);.../* Proc
b830: 65 73 73 20 72 65 6c 61 74 65 64 20 63 6f 6d 6d  ess related comm
b840: 61 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f 43 72 65  ands */..Tcl_Cre
b850: 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e  ateObjCommand(in
b860: 74 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d 3a  terp, "::system:
b870: 3a 73 79 73 63 61 6c 6c 3a 3a 67 65 74 75 69 64  :syscall::getuid
b880: 22 2c 20 74 63 6c 73 79 73 74 65 6d 5f 67 65 74  ", tclsystem_get
b890: 75 69 64 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  uid, NULL, NULL)
b8a0: 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a  ;..Tcl_CreateObj
b8b0: 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
b8c0: 22 3a 3a 73 79 73 74 65 6d 3a 3a 73 79 73 63 61  "::system::sysca
b8d0: 6c 6c 3a 3a 63 68 72 6f 6f 74 22 2c 20 74 63 6c  ll::chroot", tcl
b8e0: 73 79 73 74 65 6d 5f 63 68 72 6f 6f 74 2c 20 4e  system_chroot, N
b8f0: 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c  ULL, NULL);..Tcl
b900: 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e  _CreateObjComman
b910: 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 73 79 73  d(interp, "::sys
b920: 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a 3a 70 69  tem::syscall::pi
b930: 76 6f 74 5f 72 6f 6f 74 22 2c 20 74 63 6c 73 79  vot_root", tclsy
b940: 73 74 65 6d 5f 70 69 76 6f 74 5f 72 6f 6f 74 2c  stem_pivot_root,
b950: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54   NULL, NULL);..T
b960: 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
b970: 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 73  and(interp, "::s
b980: 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a 3a  ystem::syscall::
b990: 6b 69 6c 6c 22 2c 20 74 63 6c 73 79 73 74 65 6d  kill", tclsystem
b9a0: 5f 6b 69 6c 6c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  _kill, NULL, NUL
b9b0: 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f  L);..Tcl_CreateO
b9c0: 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  bjCommand(interp
b9d0: 2c 20 22 3a 3a 73 79 73 74 65 6d 3a 3a 73 79 73  , "::system::sys
b9e0: 63 61 6c 6c 3a 3a 70 73 22 2c 20 74 63 6c 73 79  call::ps", tclsy
b9f0: 73 74 65 6d 5f 70 73 2c 20 4e 55 4c 4c 2c 20 4e  stem_ps, NULL, N
ba00: 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74  ULL);..Tcl_Creat
ba10: 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
ba20: 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d 3a 3a 73  rp, "::system::s
ba30: 79 73 63 61 6c 6c 3a 3a 65 78 65 63 76 65 22 2c  yscall::execve",
ba40: 20 74 63 6c 73 79 73 74 65 6d 5f 65 78 65 63 76   tclsystem_execv
ba50: 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  e, NULL, NULL);.
ba60: 0a 09 2f 2a 20 4e 65 74 77 6f 72 6b 20 72 65 6c  ../* Network rel
ba70: 61 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f  ated commands */
ba80: 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43  ..Tcl_CreateObjC
ba90: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22  ommand(interp, "
baa0: 3a 3a 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c  ::system::syscal
bab0: 6c 3a 3a 69 66 63 6f 6e 66 69 67 22 2c 20 74 63  l::ifconfig", tc
bac0: 6c 73 79 73 74 65 6d 5f 69 66 63 6f 6e 66 69 67  lsystem_ifconfig
bad0: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09  , NULL, NULL);..
bae0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
baf0: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
bb00: 73 79 73 74 65 6d 3a 3a 73 79 73 63 61 6c 6c 3a  system::syscall:
bb10: 3a 72 6f 75 74 65 22 2c 20 74 63 6c 73 79 73 74  :route", tclsyst
bb20: 65 6d 5f 72 6f 75 74 65 2c 20 4e 55 4c 4c 2c 20  em_route, NULL, 
bb30: 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
bb40: 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
bb50: 65 72 70 2c 20 22 3a 3a 73 79 73 74 65 6d 3a 3a  erp, "::system::
bb60: 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74 6c 22 2c  syscall::brctl",
bb70: 20 74 63 6c 73 79 73 74 65 6d 5f 62 72 63 74 6c   tclsystem_brctl
bb80: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a  , NULL, NULL);..
bb90: 09 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  ./* Internal fun
bba0: 63 74 69 6f 6e 73 20 2a 2f 0a 09 54 63 6c 5f 43  ctions */..Tcl_C
bbb0: 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
bbc0: 69 6e 74 65 72 70 2c 20 22 3a 3a 73 79 73 74 65  interp, "::syste
bbd0: 6d 3a 3a 69 6e 74 65 72 6e 61 6c 3a 3a 68 61 73  m::internal::has
bbe0: 68 22 2c 20 74 63 6c 73 79 73 74 65 6d 5f 69 6e  h", tclsystem_in
bbf0: 74 65 72 6e 61 6c 70 72 6f 63 5f 73 69 6d 70 6c  ternalproc_simpl
bc00: 65 68 61 73 68 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  ehash, NULL, NUL
bc10: 4c 29 3b 0a 0a 09 2f 2a 20 44 65 66 69 6e 65 20  L);.../* Define 
bc20: 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 09 2f 2a  constants */../*
bc30: 2a 20 43 72 65 61 74 65 20 70 61 72 65 6e 74 20  * Create parent 
bc40: 6e 61 6d 65 73 70 61 63 65 20 2a 2a 2f 0a 09 54  namespace **/..T
bc50: 63 6c 5f 43 72 65 61 74 65 4e 61 6d 65 73 70 61  cl_CreateNamespa
bc60: 63 65 28 69 6e 74 65 72 70 2c 20 22 3a 3a 73 79  ce(interp, "::sy
bc70: 73 74 65 6d 3a 3a 63 6f 6e 73 74 22 2c 20 4e 55  stem::const", NU
bc80: 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 2a  LL, NULL);.../**
bc90: 20 44 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   Define constant
bca0: 73 2c 20 66 6f 72 20 72 65 61 6c 20 2a 2a 2f 0a  s, for real **/.
bcb0: 09 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28  .Tcl_ObjSetVar2(
bcc0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
bcd0: 74 72 69 6e 67 4f 62 6a 28 22 3a 3a 73 79 73 74  tringObj("::syst
bce0: 65 6d 3a 3a 63 6f 6e 73 74 3a 3a 48 4f 53 54 5f  em::const::HOST_
bcf0: 4e 41 4d 45 5f 4d 41 58 22 2c 20 2d 31 29 2c 20  NAME_MAX", -1), 
bd00: 4e 55 4c 4c 2c 20 54 63 6c 5f 4e 65 77 57 69 64  NULL, Tcl_NewWid
bd10: 65 49 6e 74 4f 62 6a 28 48 4f 53 54 5f 4e 41 4d  eIntObj(HOST_NAM
bd20: 45 5f 4d 41 58 29 2c 20 54 43 4c 5f 47 4c 4f 42  E_MAX), TCL_GLOB
bd30: 41 4c 5f 4f 4e 4c 59 29 3b 0a 0a 09 2f 2a 20 43  AL_ONLY);.../* C
bd40: 72 65 61 74 65 20 68 69 67 68 2d 6c 65 76 65 6c  reate high-level
bd50: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20   user functions 
bd60: 2a 2f 0a 09 54 63 6c 5f 45 76 61 6c 28 69 6e 74  */..Tcl_Eval(int
bd70: 65 72 70 2c 0a 23 69 6e 63 6c 75 64 65 20 22 73  erp,.#include "s
bd80: 79 73 74 65 6d 2e 74 63 6c 2e 68 22 20 0a 09 29  ystem.tcl.h" ..)
bd90: 3b 0a 0a 09 54 63 6c 5f 50 6b 67 50 72 6f 76 69  ;...Tcl_PkgProvi
bda0: 64 65 28 69 6e 74 65 72 70 2c 20 22 73 79 73 74  de(interp, "syst
bdb0: 65 6d 22 2c 20 22 30 2e 31 22 29 3b 0a 0a 09 72  em", "0.1");...r
bdc0: 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d  eturn(TCL_OK);.}
bdd0: 0a                                               .