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