Lines Matching refs:rcip

239 static boolean_t	args_to_rtcmd(rtcmd_irep_t *rcip, char **argv,
246 static void del_rtcmd_irep(rtcmd_irep_t *rcip);
248 static boolean_t getaddr(rtcmd_irep_t *rcip, int which, char *s,
254 rtcmd_irep_t *rcip);
258 static void inet_makenetandmask(rtcmd_irep_t *rcip, in_addr_t net,
272 static void print_rtcmd_short(FILE *to, rtcmd_irep_t *rcip,
278 static int rtmsg(rtcmd_irep_t *rcip);
284 static void set_metric(rtcmd_irep_t *rcip, char *value, int key,
1024 rtcmd_irep_t *rcip;
1026 rcip = calloc(1, sizeof (rtcmd_irep_t));
1027 if (rcip == NULL) {
1030 rcip->ri_af = af;
1031 rcip->ri_flags = RTF_STATIC;
1032 return (rcip);
1036 del_rtcmd_irep(rtcmd_irep_t *rcip)
1038 free(rcip->ri_dest_str);
1039 free(rcip->ri_gate_str);
1040 free(rcip->ri_ifp_str);
1046 if (rcip->ri_gate_hp != NULL &&
1047 rcip->ri_gate_hp->h_addrtype == AF_INET6)
1048 freehostent(rcip->ri_gate_hp);
1049 free(rcip);
1069 print_rtcmd_short(FILE *to, rtcmd_irep_t *rcip, boolean_t gw_good,
1075 switch (rcip->ri_cmd) {
1094 (rcip->ri_flags & RTF_HOST) ? "host" : "net",
1095 (rcip->ri_dest_str == NULL) ? "NULL" : rcip->ri_dest_str);
1097 if (rcip->ri_gate_str != NULL) {
1098 switch (rcip->ri_af) {
1102 inet_ntoa(rcip->ri_gate.sin.sin_addr));
1104 rcip->ri_gate_hp != NULL &&
1105 rcip->ri_gate_hp->h_addr_list[1] != NULL) {
1113 rcip->ri_gate_str,
1114 inet_ntoa(rcip->ri_gate.sin.sin_addr));
1117 rcip->ri_gate_str);
1122 &rcip->ri_gate.sin6.sin6_addr, obuf,
1130 rcip->ri_gate_hp->h_addr_list[1] != NULL) {
1132 rcip->ri_gate_str, obuf);
1139 rcip->ri_gate_str);
1146 set_metric(rtcmd_irep_t *rcip, char *value, int key, boolean_t lock)
1153 case (x): valp = &(rcip->ri_metrics.z); flag = (y); break
1165 rcip->ri_inits |= flag;
1167 rcip->ri_metrics.rmx_locks |= flag;
1172 * Parse the options give in argv[], filling in rcip with the results.
1180 args_to_rtcmd(rtcmd_irep_t *rcip, char **argv, char *cmd_string)
1205 rcip->ri_cmd = RTM_ADD;
1208 rcip->ri_cmd = RTM_CHANGE;
1211 rcip->ri_cmd = RTM_DELETE;
1214 rcip->ri_cmd = RTM_GET;
1256 rcip->ri_af = AF_LINK;
1259 rcip->ri_af = AF_INET;
1262 rcip->ri_af = PF_ROUTE;
1265 rcip->ri_af = AF_INET6;
1272 rcip->ri_flags &= ~RTF_STATIC;
1281 rcip->ri_flags |= RTF_REJECT;
1284 rcip->ri_flags |= RTF_BLACKHOLE;
1287 rcip->ri_flags |= RTF_PROTO1;
1290 rcip->ri_flags |= RTF_PROTO2;
1293 rcip->ri_flags |= RTF_CLONING;
1296 rcip->ri_flags |= RTF_XRESOLVE;
1299 rcip->ri_flags |= RTF_STATIC;
1306 if (!getaddr(rcip, RTA_IFA, tok, atype)) {
1315 if (!getaddr(rcip, RTA_IFP, tok, atype)) {
1324 if (!getaddr(rcip, RTA_GATEWAY, tok, atype)) {
1333 if (!getaddr(rcip, RTA_DST, tok, atype)) {
1342 if (!getaddr(rcip, RTA_NETMASK, tok, atype)) {
1359 set_metric(rcip, tok, key, locknext || lockrest);
1363 rcip->ri_flags |= RTF_PRIVATE;
1366 rcip->ri_flags |= RTF_MULTIRT;
1373 if (!getaddr(rcip, RTA_SRC, tok, atype)) {
1376 rcip->ri_flags |= RTF_SETSRC;
1386 if (rcip->ri_rtsa_cnt >= 1) {
1392 if (!rtsa_keyword(tok, &rcip->ri_rtsa, &err,
1399 rcip->ri_rtsa_cnt++;
1408 rcip->ri_flags |= RTF_INDIRECT;
1415 if ((rcip->ri_addrs & RTA_DST) == 0) {
1416 if (!getaddr(rcip, RTA_DST, tok, atype)) {
1419 } else if ((rcip->ri_addrs & RTA_GATEWAY) == 0) {
1426 if (!getaddr(rcip, RTA_GATEWAY, tok, atype)) {
1449 if (!getaddr(rcip, RTA_NETMASK, tok, atype)) {
1457 if ((rcip->ri_addrs & RTA_DST) == 0) {
1460 } else if ((rcip->ri_cmd == RTM_ADD || rcip->ri_cmd == RTM_DELETE) &&
1461 (rcip->ri_addrs & RTA_GATEWAY) == 0) {
1468 rcip->ri_flags |= RTF_GATEWAY;
1472 if (rcip->ri_addrs & RTA_NETMASK) {
1477 if (rcip->ri_af == AF_INET &&
1478 rcip->ri_mask.sin.sin_addr.s_addr ==
1480 rcip->ri_flags |= RTF_HOST;
1482 if (rcip->ri_af == AF_INET6 &&
1483 memcmp(&rcip->ri_mask.sin6.sin6_addr,
1486 rcip->ri_flags |= RTF_HOST;
1494 rcip->ri_flags |= RTF_HOST;
1910 inet_makenetandmask(rtcmd_irep_t *rcip, in_addr_t net, struct sockaddr_in *sin)
1951 if (!(rcip->ri_addrs & RTA_NETMASK)) {
1952 rcip->ri_addrs |= RTA_NETMASK;
1953 sin = &rcip->ri_mask.sin;
2042 getaddr(rtcmd_irep_t *rcip, int which, char *s, addr_type_t atype)
2050 hpp = &(rcip->ri_gate_hp);
2056 rcip->ri_addrs |= which;
2059 save_string(&rcip->ri_dest_str, s);
2060 su = &rcip->ri_dst;
2061 su->sa.sa_family = rcip->ri_af;
2064 save_string(&rcip->ri_gate_str, s);
2065 su = &rcip->ri_gate;
2066 su->sa.sa_family = rcip->ri_af;
2069 su = &rcip->ri_mask;
2070 su->sa.sa_family = rcip->ri_af;
2073 save_string(&rcip->ri_ifp_str, s);
2080 su = &rcip->ri_ifa;
2081 su->sa.sa_family = rcip->ri_af;
2084 su = &rcip->ri_src;
2085 su->sa.sa_family = rcip->ri_af;
2094 return (getaddr(rcip, RTA_NETMASK, s, ADDR_TYPE_NET));
2101 switch (rcip->ri_af) {
2115 (void) memset(&rcip->ri_mask.sin6.sin6_addr, 0,
2116 sizeof (rcip->ri_mask.sin6.sin6_addr));
2118 (uchar_t *)&rcip->ri_mask.sin6.sin6_addr)) {
2124 rcip->ri_mask.sin6.sin6_family = rcip->ri_af;
2125 rcip->ri_addrs |= RTA_NETMASK;
2145 atype, rcip)) {
2149 (void) memset(&rcip->ri_mask.sin.sin_addr, 0,
2150 sizeof (rcip->ri_mask.sin.sin_addr));
2152 (uchar_t *)&rcip->ri_mask.sin.sin_addr)) {
2158 rcip->ri_mask.sin.sin_family = rcip->ri_af;
2159 rcip->ri_addrs |= RTA_NETMASK;
2167 rcip));
2194 struct hostent **hpp, addr_type_t atype, rtcmd_irep_t *rcip)
2240 inet_makenetandmask(rcip, ntohl(val),
2261 inet_makenetandmask(rcip, val, sin);