鄰居表項的mcast solicit數量

2021-10-10 07:08:22 字數 1557 閱讀 1804

mcast_solicit和mcast_resolicit控制使用多播傳送鄰居位址探測報文的次數,對於arp協議,核心預設的mcast_solicit為3。

通過proc檔案mcast_solicit可檢視和修改其值。

$ cat /proc/sys/net/ipv4/neigh/ens33/mcast_solicit 

3 $ cat /proc/sys/net/ipv4/neigh/ens33/mcast_resolicit

0

在arp鄰居表arp_tbl中將neigh_var_mcast_probes索引所對應的表項初始化為3。

struct neigh_table arp_tbl =  neigh_sysctl_template __read_mostly =  else if (state & nud_delay)  else 

} else

if ((neigh->nud_state & (nud_incomplete | nud_probe)) &&

atomic_read(&neigh->probes) >= neigh_max_probes(neigh))

...if (neigh->nud_state & (nud_incomplete | nud_probe))

對於arp協議,最終將呼叫arp_solicit函式處理鄰居位址探測,如果在neigh_timer_handler函式中將鄰居表項的狀態設定為了nud_probe,並將其probes計數清零,這裡首先嘗試單播位址探測方式。最終由arp_send_dst傳送請求報文。

如果單播型別ucast_probes探測數量已經用完,函式中的變數dst_hw為空,據此arp_send_dst執行多播傳送。

static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)

else

}if (skb && !(dev->priv_flags & iff_xmit_dst_release))

dst = skb_dst(skb);

arp_send_dst(arpop_request, eth_p_arp, target, dev, saddr,

dst_hw, dev->dev_addr, null, dst);

注意這裡在呼叫neigh_proe之前,將表項中成員probes設定為ucast_probes對應的值,這樣可直接跳過單播發送,即在以上函式arp_solicit中不會給dst_hw變數賦值,arp_send_dst執行多播型別的位址探測。

int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)

else

} else if (neigh->nud_state & nud_stale) {

...out_unlock_bh:

if (immediate_probe)

neigh_probe(neigh);

核心版本 5.0

鄰居表項的STALE狀態超時時間

對於arp協議,核心預設的stale狀態超時時長為60秒鐘。struct neigh table arp tbl neigh sysctl template read mostly 顯示命令ip ntable show由核心中的函式neightbl fill parms填充值,對於gc stale的...

HCIP OSPF 鄰居的建立

ospf基於ip協議,協議號89.ospfv2 基於ipv4,ospfv3基於ipv6 基於ip協議,ospf目前成為主流的igp協議。ospf有八種狀態機,分別是 down,attempt,init,2 way,exstart,exchange,loading,full。ospf有五種報文,hel...

檔案描述符 檔案表項 v節點表項的聯絡

最近在閱讀linux0.11原始碼,看到了檔案系統,覺得檔案描述符表和檔案表項以及v節點表項概念有點混淆,於是翻了翻了萬能的apue和unix linux程式設計實踐,現在差不多弄懂了,就寫篇博文分享給大家。以前只知道檔案描述符只是乙個索引,指向了pcb中的struct file filp,即檔案描...