[ATS_IPv4_00372]组播地址不能用作源地址

Multicast address MUST NOT be used as Source address

测试目标

  • 目标:验证IUT在收到源IP地址为组播地址(Multicast Address)的ICMPv4 Echo请求时,不发送ICMPv4 Echo Reply;以避免网络混乱。

测试步骤

  1. LT(测试脚本):
  • LT发送一个ICMPv4 Echo请求给IUT。

  • 源IP地址(Source IP)设置为一个组播地址(AUTOSAR规范中未指定具体地址,我们可以选择一个常见的组播地址,例如224.0.0.1)。

  • 其他字段使用默认值。

  1. IUT:
  • 验证IUT不发送ICMPv4 Echo Reply。

  • 通过标准:IUT不回复,测试通过;如果IUT回复,测试失败

CAPL代码

cpp 复制代码
/*@!Encoding:65001*/
/*
 * This code tests if a device (IUT) correctly ignores an ICMPv4 Echo Request with a multicast source IP 
 * by sending such a request and checking for an unexpected reply.
 * 20250325 v1
 */
variables
{ 
//  const dword iutIP = 0xC0A8B239; // IUT IP: 192.168.178.57
//  const dword multicastIP = 0xE0000001; // Multicast IP: 224.0.0.1
  ethernetPacket txPacket; 

  dword gLastSequenceNumber; 
  dword SPECIAL_IDENTIFIER = 0x1234; // ICMP Echo identifier (example)

  timer testTimer; 
  byte testFailed = 0; 
}

on start
{
  // Step 1: Send ICMPv4 Echo Request with multicast source IP
  char sourceMac[18] = "00:11:22:33:44:55"; // LT MAC (example)
  char destMac[18] = "AA:BB:CC:DD:00:39";   // IUT MAC
  char sourceIP[16] = "224.0.0.1";          // Source IP: Multicast (test requirement)
  char destIP[16] = "192.168.178.57";       // Dest IP: IUT IP

  write("Starting Test ATS_IPv4_00372: Sending ICMPv4 Echo Request with multicast source IP...");

  testFailed = 0;

  sendICMPEchoRequest_Def(1, 2500, sourceMac, destMac, sourceIP, destIP);
  setTimer(testTimer, 5000);
}

void sendICMPEchoRequest_Def(
                    byte channelNum, 
                    word vlanID, 
                    char sourceMac[], 
                    char destMac[], 
                    char sourceIP[], 
                    char destIP[]
)
{
  ethernetPacket txPacket; 
  IP_Address iPaddr_Dest;  
  IP_Address iPaddr_Source; 

  txPacket.msgChannel = channelNum; 

  // Set Ethernet header
  txPacket.source = ethGetMacAddressAsNumber(sourceMac); 
  txPacket.destination = ethGetMacAddressAsNumber(destMac); 
  txPacket.type = 0x0800; 

  // Set VLAN (VLAN ID 2500, PCP=0, DEI=0)
  // 0x8100 = IEEE 802.1Q, 0x09C4 = VLAN ID 2500
  txPacket.SetVlan(0x8100, 0x09C4); 

  // Init IPv4 header
  txPacket.IPv4.Init();
  iPaddr_Source.ParseAddressFromString(sourceIP);
  iPaddr_Dest.ParseAddressFromString(destIP);   
  txPacket.IPv4.Source = iPaddr_Source.IPV4Address; 
  txPacket.IPv4.Destination = iPaddr_Dest.IPV4Address; 

  // Init ICMPv4 Echo Request
  txPacket.ICMPv4.Init();
  txPacket.ICMPv4.Echo.Init();
  gLastSequenceNumber++; // Increment sequence number
  txPacket.ICMPv4.Echo.Identifier = SPECIAL_IDENTIFIER; // Set identifier
  txPacket.ICMPv4.Echo.Sequence = gLastSequenceNumber;  // Set sequence number

  // Complete and send packet
  txPacket.CompletePacket();
  output(txPacket);
  write("Sent ICMPv4 Echo Request, Source IP: %s, Dest IP: %s", sourceIP, destIP);
}

// Listen for responses on Ethernet1
on ethernetPacket msgChannel1.*
{
  if(this.type == 0x0800 && this.Length >= 28) // IPv4 packet
  {
    if(this.Byte(9) == 0x01) // ICMP protocol
    {
      if(this.Byte(20) == 0x00) // ICMP Type: Echo Reply
      {
        if(this.source == EthGetMacAddressAsNumber("AA:BB:CC:DD:00:39")) // From IUT
        {
          write("ERROR: IUT sent ICMPv4 Echo Reply, which is NOT expected!");

          testFailed = 1;
          cancelTimer(testTimer); 
        }
      }
    }
  }
  else
  {
    write("Received packet, but not an IPv4 ICMP Echo Reply.");
  }
}

on timer testTimer
{
  if (testFailed == 0)
  {
    write("Test ATS_IPv4_00372 Passed: IUT did not send ICMPv4 Echo Reply as expected.");
  }
  else
  {
    write("Test ATS_IPv4_00372 Failed: IUT sent an unexpected ICMPv4 Echo Reply.");
  }
}
相关推荐
赞哥哥s1 天前
初始化函数的用法-节约flash空间的“妙计”
autosar·flash·data·bss
正午游巳10 天前
第二十节:MCAL GPT理论
汽车·嵌入式·autosar·车载嵌入式
正午游巳11 天前
第二十一节:MCAL GPT实操
汽车·autosar·汽车电子·车载嵌入式
酷酷的boy11 天前
AUTOSAR下网络时间(CAN)与本地 RTC 同步。
autosar·汽车电子
AUTOSAR组织1 个月前
AUTOSAR CP NvM 模块解析
汽车·autosar·软件架构·软件·标准
赞哥哥s1 个月前
2025年终总结简版
autosar
汽车软件工程师0011 个月前
ChatGpt指导嵌入式软件开发能力——2、TriCore深度专项训练
人工智能·chatgpt·autosar
汽车软件工程师0011 个月前
ChatGpt指导嵌入式软件开发能力
人工智能·chatgpt·autosar
汽车软件工程师0011 个月前
vector autosar,CAN 总线上能看到报文RTE 收不到信号COM 层 IPDU Callout 不触发
autosar
汽车软件工程师0011 个月前
vector autosar配置一个CAN接收报文,RTE层发现并未接收到信号,怎样查这个问题
开发语言·autosar