ifconfig.c (17171) | ifconfig.c (17254) |
---|---|
1/* 2 * Copyright (c) 1983, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 87 unchanged lines hidden (view full) --- 96 97struct ifreq ifr, ridreq; 98struct ifaliasreq addreq; 99#ifdef ISO 100struct iso_ifreq iso_ridreq; 101struct iso_aliasreq iso_addreq; 102#endif 103struct sockaddr_in netmask; | 1/* 2 * Copyright (c) 1983, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 87 unchanged lines hidden (view full) --- 96 97struct ifreq ifr, ridreq; 98struct ifaliasreq addreq; 99#ifdef ISO 100struct iso_ifreq iso_ridreq; 101struct iso_aliasreq iso_addreq; 102#endif 103struct sockaddr_in netmask; |
104struct netrange at_nr; /* AppleTalk net range */ |
|
104 105char name[32]; 106int flags; 107int metric; 108int mtu; 109#ifdef ISO 110int nsellength = 1; 111#endif 112int setaddr; 113int setipdst; 114int doalias; 115int clearaddr; 116int newaddr = 1; 117int s; 118kvm_t *kvmd; 119extern int errno; 120 121int setifflags(), setifaddr(), setifdstaddr(), setifnetmask(); 122int setifmetric(), setifmtu(), setifbroadaddr(), setifipdst(); | 105 106char name[32]; 107int flags; 108int metric; 109int mtu; 110#ifdef ISO 111int nsellength = 1; 112#endif 113int setaddr; 114int setipdst; 115int doalias; 116int clearaddr; 117int newaddr = 1; 118int s; 119kvm_t *kvmd; 120extern int errno; 121 122int setifflags(), setifaddr(), setifdstaddr(), setifnetmask(); 123int setifmetric(), setifmtu(), setifbroadaddr(), setifipdst(); |
124int setatrange(), setatphase(), checkatrange(); |
|
123int notealias(); 124#ifdef ISO 125int setsnpaoffset(), setnsellength(); 126#endif 127int notrailers(); 128 129#define NEXTARG 0xffffff 130 --- 14 unchanged lines hidden (view full) --- 145 { "-alias", -IFF_UP, notealias }, 146 { "delete", -IFF_UP, notealias }, 147#ifdef notdef 148#define EN_SWABIPS 0x1000 149 { "swabips", EN_SWABIPS, setifflags }, 150 { "-swabips", -EN_SWABIPS, setifflags }, 151#endif 152 { "netmask", NEXTARG, setifnetmask }, | 125int notealias(); 126#ifdef ISO 127int setsnpaoffset(), setnsellength(); 128#endif 129int notrailers(); 130 131#define NEXTARG 0xffffff 132 --- 14 unchanged lines hidden (view full) --- 147 { "-alias", -IFF_UP, notealias }, 148 { "delete", -IFF_UP, notealias }, 149#ifdef notdef 150#define EN_SWABIPS 0x1000 151 { "swabips", EN_SWABIPS, setifflags }, 152 { "-swabips", -EN_SWABIPS, setifflags }, 153#endif 154 { "netmask", NEXTARG, setifnetmask }, |
155 { "range", NEXTARG, setatrange }, 156 { "phase", NEXTARG, setatphase }, |
|
153 { "metric", NEXTARG, setifmetric }, 154 { "broadcast", NEXTARG, setifbroadaddr }, 155 { "ipdst", NEXTARG, setifipdst }, 156#ifdef ISO 157 { "snpaoffset", NEXTARG, setsnpaoffset }, 158 { "nsellength", NEXTARG, setnsellength }, 159#endif 160 { "link0", IFF_LINK0, setifflags }, --- 37 unchanged lines hidden (view full) --- 198 caddr_t af_addreq; 199} afs[] = { 200#define C(x) ((caddr_t) &x) 201 { "inet", AF_INET, in_status, in_getaddr, 202 SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, 203 { "ipx", AF_IPX, ipx_status, ipx_getaddr, 204 SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, 205 { "atalk", AF_APPLETALK, at_status, at_getaddr, | 157 { "metric", NEXTARG, setifmetric }, 158 { "broadcast", NEXTARG, setifbroadaddr }, 159 { "ipdst", NEXTARG, setifipdst }, 160#ifdef ISO 161 { "snpaoffset", NEXTARG, setsnpaoffset }, 162 { "nsellength", NEXTARG, setnsellength }, 163#endif 164 { "link0", IFF_LINK0, setifflags }, --- 37 unchanged lines hidden (view full) --- 202 caddr_t af_addreq; 203} afs[] = { 204#define C(x) ((caddr_t) &x) 205 { "inet", AF_INET, in_status, in_getaddr, 206 SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, 207 { "ipx", AF_IPX, ipx_status, ipx_getaddr, 208 SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, 209 { "atalk", AF_APPLETALK, at_status, at_getaddr, |
206 SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, | 210 SIOCDIFADDR, SIOCAIFADDR, C(addreq), C(addreq) }, |
207#ifdef NS 208 { "ns", AF_NS, xns_status, xns_getaddr, 209 SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, 210#endif 211#ifdef ISO 212 { "iso", AF_ISO, iso_status, iso_getaddr, 213 SIOCDIFADDR_ISO, SIOCAIFADDR_ISO, C(iso_ridreq), C(iso_addreq) }, 214#endif --- 229 unchanged lines hidden (view full) --- 444 int size = sizeof(rq); 445 446 rq.rq_ipx = addreq.ifra_addr; 447 rq.rq_ip = addreq.ifra_dstaddr; 448 449 if (setsockopt(s, 0, SO_IPXIP_ROUTE, &rq, size) < 0) 450 Perror("Encapsulation Routing"); 451 } | 211#ifdef NS 212 { "ns", AF_NS, xns_status, xns_getaddr, 213 SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, 214#endif 215#ifdef ISO 216 { "iso", AF_ISO, iso_status, iso_getaddr, 217 SIOCDIFADDR_ISO, SIOCAIFADDR_ISO, C(iso_ridreq), C(iso_addreq) }, 218#endif --- 229 unchanged lines hidden (view full) --- 448 int size = sizeof(rq); 449 450 rq.rq_ipx = addreq.ifra_addr; 451 rq.rq_ip = addreq.ifra_dstaddr; 452 453 if (setsockopt(s, 0, SO_IPXIP_ROUTE, &rq, size) < 0) 454 Perror("Encapsulation Routing"); 455 } |
456 if (af == AF_APPLETALK) 457 checkatrange((struct sockaddr_at *) &addreq.ifra_addr); |
|
452#ifdef NS 453 if (setipdst && af==AF_NS) { 454 struct nsip_req rq; 455 int size = sizeof(rq); 456 457 rq.rq_ns = addreq.ifra_addr; 458 rq.rq_ip = addreq.ifra_dstaddr; 459 --- 302 unchanged lines hidden (view full) --- 762 putchar('\n'); 763 764} 765 766at_status(force) 767 int force; 768{ 769 struct sockaddr_at *sat, null_sat; | 458#ifdef NS 459 if (setipdst && af==AF_NS) { 460 struct nsip_req rq; 461 int size = sizeof(rq); 462 463 rq.rq_ns = addreq.ifra_addr; 464 rq.rq_ip = addreq.ifra_dstaddr; 465 --- 302 unchanged lines hidden (view full) --- 768 putchar('\n'); 769 770} 771 772at_status(force) 773 int force; 774{ 775 struct sockaddr_at *sat, null_sat; |
776 struct netrange *nr; |
|
770 771 memset(&null_sat, 0, sizeof(null_sat)); 772 773 sat = (struct sockaddr_at *)info.rti_info[RTAX_IFA]; 774 if (!sat || sat->sat_family != AF_APPLETALK) { 775 if (!force) 776 return; | 777 778 memset(&null_sat, 0, sizeof(null_sat)); 779 780 sat = (struct sockaddr_at *)info.rti_info[RTAX_IFA]; 781 if (!sat || sat->sat_family != AF_APPLETALK) { 782 if (!force) 783 return; |
777 /* warnx("%s has no AF_APPLETALK IFA address!", name); */ | |
778 sat = &null_sat; 779 } | 784 sat = &null_sat; 785 } |
780 printf("\tatalk %d.%d ", 781 ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node); 782 | 786 nr = (struct netrange *) &sat->sat_zero; 787 printf("\tatalk %d.%d range %d-%d phase %d", 788 ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node, 789 ntohs(nr->nr_firstnet), ntohs(nr->nr_lastnet), nr->nr_phase); |
783 if (flags & IFF_POINTOPOINT) { 784 /* note RTAX_BRD overlap with IFF_BROADCAST */ 785 sat = (struct sockaddr_at *)info.rti_info[RTAX_BRD]; 786 if (!sat) 787 sat = &null_sat; | 790 if (flags & IFF_POINTOPOINT) { 791 /* note RTAX_BRD overlap with IFF_BROADCAST */ 792 sat = (struct sockaddr_at *)info.rti_info[RTAX_BRD]; 793 if (!sat) 794 sat = &null_sat; |
788 printf("--> %d.%d ", | 795 printf("--> %d.%d", |
789 ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node); 790 } | 796 ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node); 797 } |
798 if (flags & IFF_BROADCAST) { 799 /* note RTAX_BRD overlap with IFF_POINTOPOINT */ 800 sat = (struct sockaddr_at *)info.rti_info[RTAX_BRD]; 801 if (sat) 802 printf(" broadcast %d.%d", 803 ntohs(sat->sat_addr.s_net), 804 sat->sat_addr.s_node); 805 } |
|
791 792 putchar('\n'); 793} 794 795#ifdef NS 796xns_status(force) 797 int force; 798{ --- 183 unchanged lines hidden (view full) --- 982 983 sipx->sipx_family = AF_IPX; 984 sipx->sipx_len = sizeof(*sipx); 985 sipx->sipx_addr = ipx_addr(addr); 986 if (which == MASK) 987 printf("Attempt to set IPX netmask will be ineffectual\n"); 988} 989 | 806 807 putchar('\n'); 808} 809 810#ifdef NS 811xns_status(force) 812 int force; 813{ --- 183 unchanged lines hidden (view full) --- 997 998 sipx->sipx_family = AF_IPX; 999 sipx->sipx_len = sizeof(*sipx); 1000 sipx->sipx_addr = ipx_addr(addr); 1001 if (which == MASK) 1002 printf("Attempt to set IPX netmask will be ineffectual\n"); 1003} 1004 |
990#define SATALK(x) ((struct sockaddr_at *) &(x)) 991struct sockaddr_at *atalktab[] = { 992SATALK(ridreq.ifr_addr), SATALK(addreq.ifra_addr), 993SATALK(addreq.ifra_mask), SATALK(addreq.ifra_broadaddr)}; 994 995at_getaddr(addr, which) 996char *addr; | 1005at_getaddr(char *addr, int which) |
997{ | 1006{ |
998 struct sockaddr_at *sat = atalktab[which]; | 1007 struct sockaddr_at *sat = (struct sockaddr_at *) &addreq.ifra_addr; |
999 u_int net, node; 1000 | 1008 u_int net, node; 1009 |
1001 sat->sat_family = AF_IPX; | 1010 sat->sat_family = AF_APPLETALK; |
1002 sat->sat_len = sizeof(*sat); | 1011 sat->sat_len = sizeof(*sat); |
1012 if (which == MASK) 1013 errx(1, "AppleTalk does not use netmasks\n"); |
|
1003 if (sscanf(addr, "%u.%u", &net, &node) != 2 | 1014 if (sscanf(addr, "%u.%u", &net, &node) != 2 |
1004 /* || net == 0 || net > 0xffff || node == 0 || node > 0xfe */ ) 1005 errx(1, "%s: bad value", addr); | 1015 || net == 0 || net > 0xffff || node == 0 || node > 0xfe) 1016 errx(1, "%s: illegal address", addr); |
1006 sat->sat_addr.s_net = htons(net); 1007 sat->sat_addr.s_node = node; | 1017 sat->sat_addr.s_net = htons(net); 1018 sat->sat_addr.s_node = node; |
1008 if (which == MASK) 1009 printf("Attempt to set AppleTalk netmask" 1010 " will be ineffectual\n"); | |
1011} 1012 | 1019} 1020 |
1021setatrange(char *range) 1022{ 1023 u_short first = 123, last = 123; 1024 1025 if (sscanf(range, "%hu-%hu", &first, &last) != 2 1026 || first == 0 || first > 0xffff 1027 || last == 0 || last > 0xffff || first > last) 1028 errx(1, "%s: illegal net range: %u-%u", range, first, last); 1029 at_nr.nr_firstnet = htons(first); 1030 at_nr.nr_lastnet = htons(last); 1031} 1032 1033setatphase(char *phase) 1034{ 1035 if (!strcmp(phase, "1")) 1036 at_nr.nr_phase = 1; 1037 else if (!strcmp(phase, "2")) 1038 at_nr.nr_phase = 2; 1039 else 1040 errx(1, "%s: illegal phase", phase); 1041} 1042 1043checkatrange(struct sockaddr_at *sat) 1044{ 1045 if (at_nr.nr_phase == 0) 1046 at_nr.nr_phase = 2; /* Default phase 2 */ 1047 if (at_nr.nr_firstnet == 0) 1048 at_nr.nr_firstnet = /* Default range of one */ 1049 at_nr.nr_lastnet = sat->sat_addr.s_net; 1050printf("\tatalk %d.%d range %d-%d phase %d\n", 1051 ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node, 1052 ntohs(at_nr.nr_firstnet), ntohs(at_nr.nr_lastnet), at_nr.nr_phase); 1053 if ((u_short) ntohs(at_nr.nr_firstnet) > 1054 (u_short) ntohs(sat->sat_addr.s_net) 1055 || (u_short) ntohs(at_nr.nr_lastnet) < 1056 (u_short) ntohs(sat->sat_addr.s_net)) 1057 errx(1, "AppleTalk address is not in range"); 1058 *((struct netrange *) &sat->sat_zero) = at_nr; 1059} 1060 |
|
1013#ifdef NS 1014#define SNS(x) ((struct sockaddr_ns *) &(x)) 1015struct sockaddr_ns *snstab[] = { 1016SNS(ridreq.ifr_addr), SNS(addreq.ifra_addr), 1017SNS(addreq.ifra_mask), SNS(addreq.ifra_broadaddr)}; 1018 1019xns_getaddr(addr, which) 1020char *addr; --- 59 unchanged lines hidden --- | 1061#ifdef NS 1062#define SNS(x) ((struct sockaddr_ns *) &(x)) 1063struct sockaddr_ns *snstab[] = { 1064SNS(ridreq.ifr_addr), SNS(addreq.ifra_addr), 1065SNS(addreq.ifra_mask), SNS(addreq.ifra_broadaddr)}; 1066 1067xns_getaddr(addr, which) 1068char *addr; --- 59 unchanged lines hidden --- |