aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/if_ether.c
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2021-08-02 22:39:00 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2021-08-04 22:52:43 +0000
commitf3a3b061216936b6233d1624dfdba03240d7c045 (patch)
tree3a4c9ba08030056153967a9dde24889b2a614326 /sys/netinet/if_ether.c
parentcd2401cdd550e26dad098cdfb60d46a478b9ecb6 (diff)
Diffstat (limited to 'sys/netinet/if_ether.c')
-rw-r--r--sys/netinet/if_ether.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index ef50ec9ca964..3eb9d7210afb 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -207,7 +207,6 @@ arptimer(void *arg)
{
struct llentry *lle = (struct llentry *)arg;
struct ifnet *ifp;
- int r_skip_req;
if (lle->la_flags & LLE_STATIC) {
return;
@@ -240,27 +239,17 @@ arptimer(void *arg)
/*
* Expiration time is approaching.
- * Let's try to refresh entry if it is still
- * in use.
- *
- * Set r_skip_req to get feedback from
- * fast path. Change state and re-schedule
- * ourselves.
+ * Request usage feedback from the datapath.
+ * Change state and re-schedule ourselves.
*/
- LLE_REQ_LOCK(lle);
- lle->r_skip_req = 1;
- LLE_REQ_UNLOCK(lle);
+ llentry_request_feedback(lle);
lle->ln_state = ARP_LLINFO_VERIFY;
callout_schedule(&lle->lle_timer, hz * V_arpt_rexmit);
LLE_WUNLOCK(lle);
CURVNET_RESTORE();
return;
case ARP_LLINFO_VERIFY:
- LLE_REQ_LOCK(lle);
- r_skip_req = lle->r_skip_req;
- LLE_REQ_UNLOCK(lle);
-
- if (r_skip_req == 0 && lle->la_preempt > 0) {
+ if (llentry_get_hittime(lle) > 0 && lle->la_preempt > 0) {
/* Entry was used, issue refresh request */
struct epoch_tracker et;
struct in_addr dst;
@@ -532,7 +521,7 @@ arpresolve_full(struct ifnet *ifp, int is_gw, int flags, struct mbuf *m,
bcopy(lladdr, desten, ll_len);
/* Notify LLE code that the entry was used by datapath */
- llentry_mark_used(la);
+ llentry_provide_feedback(la);
if (pflags != NULL)
*pflags = la->la_flags & (LLE_VALID|LLE_IFADDR);
if (plle) {
@@ -656,7 +645,7 @@ arpresolve(struct ifnet *ifp, int is_gw, struct mbuf *m,
if (pflags != NULL)
*pflags = LLE_VALID | (la->r_flags & RLLE_IFADDR);
/* Notify the LLE handling code that the entry was used. */
- llentry_mark_used(la);
+ llentry_provide_feedback(la);
if (plle) {
LLE_ADDREF(la);
*plle = la;
@@ -1225,7 +1214,7 @@ arp_check_update_lle(struct arphdr *ah, struct in_addr isaddr, struct ifnet *ifp
return;
/* Clear fast path feedback request if set */
- la->r_skip_req = 0;
+ llentry_mark_used(la);
}
arp_mark_lle_reachable(la);