在非严重队列中丢弃数据包不太常见或不太可能会影响客户。

以下是可以监控的非严重队列。

vc_queue_vcmp_init - 该队列提供有关新的隧道设置的 VCMP 隧道启动消息。根据可用的内核数,网关将入站隧道请求限制为在不中断现有流量的情况下可以处理的最大速率。因此,预计在具有很多隧道的网关上的队列中会丢弃数据包。

在发生特定事件(如网关重新启动或传输中断)后,将以突发形式大量丢弃数据包;在正常运行期间,不会出现这种情况。

vc_queue_vcmp_ctrl_0 和 vc_queue_vcmp_ctrl_1 - 该队列提供在现有隧道上收到的 VCMP 隧道管理控制消息。这包括路由更新、路径状态更新、检测信号、统计信息、QoS 同步和隧道信息等消息。

几乎所有控制消息都具有内置的重试机制以处理这些数据包丢弃情况,例如,路由更新。

以下是一个用于查找 VCMP 控制数据包丢弃的 Python 示例脚本。

#!/usr/bin/env python
"""
Check VCG vcmp drop count
"""
import os
import sys
import subprocess
import commands
import re
from optparse import OptionParser
# Parse commandline options:
parser = OptionParser(usage="%prog -w <warning threshold> -c <critical threshold> -o <vcmp> [ -h ]")
parser.add_option("-w", "--warning", action="store", type="string", dest="warn_threshold", help="Count Warning threshold should be in <value>")
parser.add_option("-c", "--critical",action="store", type="string", dest="crit_threshold", help="Count Critical threshold should be in <value>")
parser.add_option("-o", "--vcmp-name",action="store", type="string", dest="vcmp_name", help="VCMP Name in ctrl or tx drop <value>")
(options, args) = parser.parse_args()

def get_vcg_vcmp_drop_count(VCMPNAME):
 if os.path.isfile('/opt/vc/bin/debug.py'):
        L=[]
        f=subprocess.check_output(["/opt/vc/bin/debug.py","--handoff"])
        x=[r.split() for r in f.split('\n')]
        reg = re.compile(VCMPNAME)
        for i in x:
         if filter(reg.match, i):
           L.append((int(i[7])))
        return list(L)
 else:
    print "Critical: unable to get vcmp drop count()"
    sys.exit(2)

if __name__ == '__main__':
  if not options.vcmp_name:
      print "Critical: Missing vcmp drop name. (vc_queue_vcmp_ctrl or vc_queue_vcmp_tx)"
      sys.exit(2)
  if not options.crit_threshold:
      print "CRITICAL: Missing critical threshold value."
      sys.exit(2)
  if not options.warn_threshold:
      print "CRITICAL: Missing warning threshold value."
      sys.exit(2)

  vcmp_name = options.vcmp_name
  crit_threshold = options.crit_threshold
  warn_threshold = options.warn_threshold

  result = get_vcg_vcmp_drop_count(vcmp_name)
  result_data = sum(result)
  if os.path.exists("/tmp/ vc_queue_vcmp_data_output"):
     cmd="cat /tmp/ vc_queue_vcmp_data_output"
     status,output = commands.getstatusoutput(cmd)
     change= int(result_data) -  int(output)

  cmd="echo %d > /tmp/ vc_queue_vcmp_data_output" %result_data
  status,output = commands.getstatusoutput(cmd)
  if not list(result):
      print "Critical: Unable to get vcmp drop count."
      sys.exit(2)
  else:
      if int(change) > int(crit_threshold) :
        print "Critical. Drop count > crit_threshold: vc_queue_vcmp_ctrl_0: %s and vc_queue_vcmp_ctrl_1: %s" % (result[0],result[1])
        sys.exit(1)
      elif int(change) > int(warn_threshold) :
        print "Warning. Drop count > warn_threshold: vc_queue_vcmp_ctrl_0: %s and vc_queue_vcmp_ctrl_1: %s" % (result[0],result[1])
        sys.exit(1)
      else:
        print "OK. Drop count: %s" % result
        sys.exit(0)

vc_queue_vcmp_bottom - 该队列是在 VCMP 隧道上接收的 VCMP 数据包的第二处理阶段。该队列负责将流量路由到相应的目标,例如,NAT、VLAN/VRF、Non VMware SD-WAN Site 和 Edge。

在该队列中不太可能会丢弃数据包,因为在 vc_queue_vcmp_data_X 队列中更可能会丢弃数据包。

vc_queue_ike - 该队列处理 IKE 协议消息以管理加密会话的密钥和其他状态。

通常,这是较小的流量,因此,不太可能会在此处丢弃数据包。如果丢弃数据包,将重试 IKE 消息。