Lines Matching refs:k

907 	struct khash *k, **pk;  in kern_find()  local
909 for (pk = &KHASH(dst, mask); (k = *pk) != NULL; pk = &k->k_next) { in kern_find()
910 if (k->k_dst == dst && k->k_mask == mask && in kern_find()
911 (gate == 0 || k->k_gate == gate) && in kern_find()
912 (ifp == NULL || k->k_ifp == ifp)) { in kern_find()
918 return (k); in kern_find()
930 struct khash *k, **pk; in kern_alternate() local
932 for (pk = &KHASH(dst, mask); (k = *pk) != NULL; pk = &k->k_next) { in kern_alternate()
933 if (k->k_dst == dst && k->k_mask == mask && in kern_alternate()
934 (k->k_gate != gate) && in kern_alternate()
935 (k->k_ifp == ifp)) { in kern_alternate()
941 return (k); in kern_alternate()
947 struct khash *k, **pk; in kern_add() local
949 k = kern_find(dst, mask, gate, ifp, &pk); in kern_add()
950 if (k != NULL) in kern_add()
951 return (k); in kern_add()
953 k = rtmalloc(sizeof (*k), "kern_add"); in kern_add()
955 (void) memset(k, 0, sizeof (*k)); in kern_add()
956 k->k_dst = dst; in kern_add()
957 k->k_mask = mask; in kern_add()
958 k->k_state = KS_NEW; in kern_add()
959 k->k_keep = now.tv_sec; in kern_add()
960 k->k_gate = gate; in kern_add()
961 k->k_ifp = ifp; in kern_add()
962 *pk = k; in kern_add()
964 return (k); in kern_add()
971 struct khash *k, *kprev, *knext; in kern_flush_ifp() local
976 for (k = khash_bins[i]; k != NULL; k = knext) { in kern_flush_ifp()
977 knext = k->k_next; in kern_flush_ifp()
978 if (k->k_ifp == ifp) { in kern_flush_ifp()
980 kprev->k_next = k->k_next; in kern_flush_ifp()
982 khash_bins[i] = k->k_next; in kern_flush_ifp()
983 free(k); in kern_flush_ifp()
986 kprev = k; in kern_flush_ifp()
998 struct khash *k; in kern_rewire_ifp() local
1002 for (k = khash_bins[i]; k; k = k->k_next) { in kern_rewire_ifp()
1003 if (k->k_ifp == oldifp) { in kern_rewire_ifp()
1004 k->k_ifp = newifp; in kern_rewire_ifp()
1006 "from %s to %s", k, oldifp->int_name, in kern_rewire_ifp()
1019 kern_check_static(struct khash *k, struct interface *ifp) in kern_check_static() argument
1027 new.rts_gate = k->k_gate; in kern_check_static()
1029 new.rts_metric = k->k_metric; in kern_check_static()
1033 rt = rtget(k->k_dst, k->k_mask); in kern_check_static()
1035 (k->k_state & KS_PRIVATE)) in kern_check_static()
1054 rtadd(k->k_dst, k->k_mask, rt_state, &new); in kern_check_static()
1061 kern_ioctl(struct khash *k, in kern_ioctl() argument
1065 if (((k->k_state & (KS_IF|KS_PASSIVE)) == KS_IF) || in kern_ioctl()
1066 (k->k_state & KS_DEPRE_IF)) { in kern_ioctl()
1073 addrname(k->k_dst, k->k_mask, 0), naddr_ntoa(k->k_gate)); in kern_ioctl()
1079 k->k_state &= ~KS_DYNAMIC; in kern_ioctl()
1080 if (k->k_state & KS_DELETED) in kern_ioctl()
1082 k->k_state |= KS_DELETED; in kern_ioctl()
1085 k->k_state &= ~KS_DELETED; in kern_ioctl()
1088 if (k->k_state & KS_DELETED) { in kern_ioctl()
1090 k->k_state &= ~KS_DELETED; in kern_ioctl()
1105 rtioctl(action, k->k_dst, k->k_gate, k->k_mask, k->k_ifp, in kern_ioctl()
1106 k->k_metric, flags); in kern_ioctl()
1119 struct khash *k; in rtm_add() local
1151 k = kern_add(S_ADDR(INFO_DST(info)), mask, gate, ifp); in rtm_add()
1153 if (k->k_state & KS_NEW) in rtm_add()
1154 k->k_keep = now.tv_sec+keep; in rtm_add()
1158 k->k_metric = HOPCNT_INFINITY; in rtm_add()
1163 k->k_metric = HOPCNT_INFINITY; in rtm_add()
1165 k->k_gate = S_ADDR(INFO_GATE(info)); in rtm_add()
1166 k->k_metric = rtm->rtm_rmx.rmx_hopcount; in rtm_add()
1167 if (k->k_metric < 0) in rtm_add()
1168 k->k_metric = 0; in rtm_add()
1169 else if (k->k_metric > HOPCNT_INFINITY-1) in rtm_add()
1170 k->k_metric = HOPCNT_INFINITY-1; in rtm_add()
1173 if ((k->k_state & KS_NEW) && interf_route) { in rtm_add()
1174 if (k->k_gate != 0 && findifaddr(k->k_gate) == NULL) in rtm_add()
1175 k->k_state |= KS_DEPRE_IF; in rtm_add()
1177 k->k_state |= KS_IF; in rtm_add()
1180 k->k_state &= ~(KS_NEW | KS_DELETE | KS_ADD | KS_CHANGE | KS_DEL_ADD | in rtm_add()
1183 k->k_state |= KS_GATEWAY; in rtm_add()
1185 k->k_state |= KS_STATIC; in rtm_add()
1187 k->k_state |= KS_PRIVATE; in rtm_add()
1203 k->k_state &= ~KS_DYNAMIC; in rtm_add()
1204 k->k_state |= KS_DELETE; in rtm_add()
1208 addrname(k->k_dst, k->k_mask, 0), in rtm_add()
1209 naddr_ntoa(k->k_gate), in rtm_add()
1212 k->k_state |= KS_DYNAMIC; in rtm_add()
1213 k->k_redirect_time = now.tv_sec; in rtm_add()
1215 addrname(k->k_dst, k->k_mask, 0), in rtm_add()
1216 naddr_ntoa(k->k_gate), in rtm_add()
1226 if (!(k->k_state & KS_STATIC)) { in rtm_add()
1227 if (!(k->k_state & (KS_IF|KS_DEPRE_IF|KS_FILE))) in rtm_add()
1228 k->k_state |= KS_DELETE; in rtm_add()
1229 LIM_SEC(need_kern, k->k_keep); in rtm_add()
1238 kern_check_static(k, ifp); in rtm_add()
1332 struct khash *k; in sync_kern() local
1356 for (k = khash_bins[i]; k != NULL; k = k->k_next) { in sync_kern()
1357 if (!(k->k_state & (KS_IF|KS_DEPRE_IF))) in sync_kern()
1358 k->k_state |= KS_CHECK; in sync_kern()
1541 for (k = khash_bins[i]; k != NULL; k = k->k_next) { in sync_kern()
1549 if ((k->k_state & (KS_CHECK|KS_DELETED)) == KS_CHECK) { in sync_kern()
1551 if (!(k->k_state & KS_DYNAMIC)) { in sync_kern()
1554 addrname(k->k_dst, k->k_mask, 0), in sync_kern()
1555 naddr_ntoa(k->k_gate)); in sync_kern()
1557 del_static(k->k_dst, k->k_mask, k->k_gate, in sync_kern()
1558 k->k_ifp, 1); in sync_kern()
1882 struct khash *k; in kern_out() local
1893 k = kern_find(htonl(ag->ag_dst_h), ag->ag_mask, in kern_out()
1895 if (k == NULL) in kern_out()
1898 k = kern_add(htonl(ag->ag_dst_h), ag->ag_mask, ag->ag_nhop, in kern_out()
1902 if (k->k_state & KS_NEW) { in kern_out()
1904 k->k_state = KS_ADD; in kern_out()
1906 k->k_state |= KS_GATEWAY; in kern_out()
1908 k->k_state |= KS_IF; in kern_out()
1910 k->k_state |= KS_PASSIVE; in kern_out()
1912 k->k_state |= KS_FILE; in kern_out()
1913 k->k_gate = ag->ag_nhop; in kern_out()
1914 k->k_ifp = ifp; in kern_out()
1915 k->k_metric = ag->ag_metric; in kern_out()
1919 if ((k->k_state & (KS_STATIC|KS_DEPRE_IF)) || in kern_out()
1920 ((k->k_state & (KS_IF|KS_PASSIVE)) == KS_IF)) { in kern_out()
1925 if (k->k_gate == ag->ag_nhop && k->k_ifp == ag->ag_ifp && in kern_out()
1926 k->k_metric != ag->ag_metric) { in kern_out()
1931 if (k->k_metric == HOPCNT_INFINITY) in kern_out()
1932 k->k_state |= KS_DEL_ADD; in kern_out()
1933 k->k_gate = ag->ag_nhop; in kern_out()
1934 k->k_metric = ag->ag_metric; in kern_out()
1935 k->k_state |= KS_CHANGE; in kern_out()
1944 if ((k->k_state & (KS_DYNAMIC | KS_DELETED)) != 0) { in kern_out()
1945 k->k_state &= ~KS_DYNAMIC; in kern_out()
1946 k->k_state |= (KS_ADD | KS_DEL_ADD); in kern_out()
1949 if ((k->k_state & KS_GATEWAY) && !(ag->ag_state & AGS_GATEWAY)) { in kern_out()
1950 k->k_state &= ~KS_GATEWAY; in kern_out()
1951 k->k_state |= (KS_ADD | KS_DEL_ADD); in kern_out()
1952 } else if (!(k->k_state & KS_GATEWAY) && (ag->ag_state & AGS_GATEWAY)) { in kern_out()
1953 k->k_state |= KS_GATEWAY; in kern_out()
1954 k->k_state |= (KS_ADD | KS_DEL_ADD); in kern_out()
1962 if (k->k_metric == HOPCNT_INFINITY && (k->k_state & KS_DEL_ADD)) in kern_out()
1963 k->k_state |= KS_DELETE; in kern_out()
1965 k->k_state &= ~KS_DELETE; in kern_out()
2091 struct khash *k, *pk, *knext; in fix_kern() local
2102 for (k = khash_bins[i]; k != NULL; k = knext) { in fix_kern()
2103 knext = k->k_next; in fix_kern()
2106 if ((k->k_state & KS_DEPRE_IF) || in fix_kern()
2107 (k->k_state & (KS_IF|KS_PASSIVE)) == KS_IF) { in fix_kern()
2108 pk = k; in fix_kern()
2113 if (k->k_state & KS_STATIC) { in fix_kern()
2114 kern_check_static(k, 0); in fix_kern()
2115 pk = k; in fix_kern()
2120 if (k->k_keep > now.tv_sec) { in fix_kern()
2122 LIM_SEC(need_kern, k->k_keep); in fix_kern()
2123 pk = k; in fix_kern()
2127 if ((k->k_state & KS_DELETE) && in fix_kern()
2128 !(k->k_state & KS_DYNAMIC)) { in fix_kern()
2129 if ((k->k_dst == RIP_DEFAULT) && in fix_kern()
2130 (k->k_ifp != NULL) && in fix_kern()
2132 k->k_mask, k->k_gate, k->k_ifp, in fix_kern()
2134 rdisc_restore(k->k_ifp); in fix_kern()
2135 kern_ioctl(k, RTM_DELETE, 0); in fix_kern()
2140 free(k); in fix_kern()
2144 if (k->k_state & KS_DEL_ADD) in fix_kern()
2145 kern_ioctl(k, RTM_DELETE, 0); in fix_kern()
2147 if (k->k_state & KS_ADD) { in fix_kern()
2148 if ((k->k_dst == RIP_DEFAULT) && in fix_kern()
2149 (k->k_ifp != NULL)) in fix_kern()
2150 rdisc_suppress(k->k_ifp); in fix_kern()
2151 kern_ioctl(k, RTM_ADD, in fix_kern()
2152 ((0 != (k->k_state & (KS_GATEWAY | in fix_kern()
2154 } else if (k->k_state & KS_CHANGE) { in fix_kern()
2155 kern_ioctl(k, RTM_CHANGE, in fix_kern()
2156 ((0 != (k->k_state & (KS_GATEWAY | in fix_kern()
2159 k->k_state &= ~(KS_ADD|KS_CHANGE|KS_DEL_ADD); in fix_kern()
2168 k->k_state |= KS_DELETE; in fix_kern()
2169 pk = k; in fix_kern()
2180 struct khash *k; in del_static() local
2191 k = kern_find(dst, mask, gate, ifp, NULL); in del_static()
2192 if (k != NULL && (gate == 0 || k->k_gate == gate)) { in del_static()
2193 k->k_state &= ~(KS_STATIC | KS_DYNAMIC | KS_CHECK); in del_static()
2194 k->k_state |= KS_DELETE; in del_static()
2196 k->k_state |= KS_DELETED; in del_static()
2197 k->k_keep = now.tv_sec + K_KEEP_LIM; in del_static()
2215 struct khash *k; in del_redirects() local
2219 for (k = khash_bins[i]; k != NULL; k = k->k_next) { in del_redirects()
2220 if (!(k->k_state & KS_DYNAMIC) || in del_redirects()
2221 (k->k_state & (KS_STATIC|KS_IF|KS_DEPRE_IF))) in del_redirects()
2224 if (k->k_gate != bad_gate && k->k_redirect_time > old && in del_redirects()
2228 k->k_state |= KS_DELETE; in del_redirects()
2229 k->k_state &= ~KS_DYNAMIC; in del_redirects()
2232 addrname(k->k_dst, k->k_mask, 0), in del_redirects()
2233 naddr_ntoa(k->k_gate)); in del_redirects()
2508 struct khash *k; in rts_delete() local
2511 k = kern_find(rt->rt_dst, rt->rt_mask, in rts_delete()
2513 if (k != NULL && in rts_delete()
2514 !(k->k_state & KS_DEPRE_IF) && in rts_delete()
2515 ((k->k_state & (KS_IF|KS_PASSIVE)) != KS_IF)) { in rts_delete()
2516 k->k_state |= KS_DELETE; in rts_delete()
2870 struct khash *k; in kern_dump() local
2873 for (k = khash_bins[i]; k != NULL; k = k->k_next) in kern_dump()
2874 trace_khash(k); in kern_dump()