common/cmd_cache.c

  1. int do_getmac(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  2. {
  3.     //usend d43d7e45371c 192.168.1.134 1234 1234 hhaa
  4.     char ethsrc[6]={0xff ,0xff ,0xff ,0xff ,0xff, 0xff};
  5.     char ethdst[6]={0xff ,0xff ,0xff ,0xff ,0xff, 0xff};
  6.     
  7.     _getmac(argv[3],ethsrc);         
  8.     getmacfromipaddress(argv[1],ethdst,argv[2],ethsrc);
  9.     //printf("%s mac is  %x %x %x %x %x %x\n",argv[1],eth[0],eth[1],eth[2],eth[3],eth[4],eth[5]);
  10.     
  11.     return 0;
  12.     
  13. }
  14.  
  15. U_BOOT_CMD (getmac, 6, 1, do_getmac,
  16.     "getmac destip srcip srceth",
  17.     "[operation type] [device number] [image address] [image size]\n"    
  18. );

common/tftp.c

  1. int global_raw_reveive = 0;
  2. void getmacfromipaddress(const char* remoteip, char* remoteeth,const char* ourip,char* oureth)
  3. {
  4. /* and do the ARP request */
  5. IPaddr_t RemoteIP;
  6. IPaddr_t MyIP;
  7. RemoteIP= string_to_ip(remoteip);
  8. MyIP = string_to_ip(ourip);
  9.  
  10. ArpRequestsend(RemoteIP,oureth,MyIP);
  11. global_raw_reveive = 1;
  12. eth_rx();
  13. global_raw_reveive = 0;
  14. // NetRxPacket = inpkt;
  15. // NetRxPacketLen = len;
  16. //printbuffer((unsigned char*)NetRxPacket,NetRxPacketLen);
  17. //_printarp((unsigned char*)NetRxPacket,NetRxPacketLen);
  18. return 1; /* waiting */
  19. }

net/net.c

  1. void ArpRequestsend(IPaddr_t remoteip,char* oureth,IPaddr_t ourip)
  2. {
  3. int i;
  4. volatile uchar *pkt;
  5. ARP_t *arp;
  6.  
  7. pkt = NetTxPacket;
  8. pkt += NetSetEther(pkt, NetBcastAddr, PROT_ARP);
  9. arp = (ARP_t *) pkt;
  10. arp->ar_hrd = htons(ARP_ETHER);
  11. arp->ar_pro = htons(PROT_IP);
  12. arp->ar_hln = 6;
  13. arp->ar_pln = 4;
  14. arp->ar_op = htons(ARPOP_REQUEST);
  15. /* source ET addr */
  16. memcpy(&arp->ar_data[0], oureth, 6);
  17. /* source IP addr */
  18. NetWriteIP((uchar *) &arp->ar_data[6], ourip);
  19. for (i = 10; i < 16; ++i) {
  20. /* dest ET addr = 0 */
  21. arp->ar_data[i] = 0;
  22. }
  23. NetWriteIP((uchar *) &arp->ar_data[16], remoteip);
  24. (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
  25. }
  1. void
  2. NetReceive(volatile uchar *inpkt, int len)
  3. {
  4. Ethernet_t *et;
  5. IP_t *ip;
  6. ARP_t *arp;
  7. IPaddr_t tmp;
  8. IPaddr_t src_ip;
  9. int x;
  10. uchar *pkt;
  11. #if defined(CONFIG_CMD_CDP)
  12. int iscdp;
  13. #endif
  14. ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid;
  15.  
  16. debug("packet received.%d\n", len);
  17.  
  18. NetRxPacket = inpkt;
  19. NetRxPacketLen = len;
  20. et = (Ethernet_t *)inpkt;
  21. <span style="color:#FF0000;">if(global_raw_reveive){
  22. //global_raw_reveive=0;
  23. printpacket((Ethernet_t *)NetRxPacket,len);
  24. return;
  25. }</span>

driver/net/cpsw.c

  1. void printbuffer(unsigned char* buffer, int len)
  2. {
  3. int i;
  4. for(i=0;i<len;i++){
  5. printf("%2.2x ",buffer[i]);
  6. if((i&15)==15)printf("\n");
  7. }
  8. printf("\n");
  9. }
  10. #define printhex(a,b) printf(#b##"=%x\n",a->b);
  11. void printarp(ARP_t * arp,int len)
  12. {
  13.     // ushort        ar_hrd;        /* Format of hardware address    */
  14.     // ushort        ar_pro;        /* Format of protocol address    */
  15.     // uchar        ar_hln;        /* Length of hardware address    */
  16.     // uchar        ar_pln;        /* Length of protocol address    */
  17.     // ushort        ar_op;        /* Operation            */
  18.     // uchar        ar_data[0];
  19.      printf("ar_hrd %x\n",arp->ar_hrd);
  20.      printf("ar_pro %x\n",arp->ar_pro);
  21.      printf("ar_hln %x\n",arp->ar_hln);
  22.      printf("ar_pln %x\n",arp->ar_pln);
  23.      printf("ar_op %x\n",arp->ar_op);
  24.     printf("mac_src %.2x%.2x%.2x%.2x%.2x%.2x\n",arp->ar_data[0],arp->ar_data[1],arp->ar_data[2],arp->ar_data[3],arp->ar_data[4],arp->ar_data[5]);    
  25.     printf("ip_src %d %d %d %d\n",arp->ar_data[6],arp->ar_data[7],arp->ar_data[8],arp->ar_data[9]);
  26.     printf("mac_dst %.2x%.2x%.2x%.2x%.2x%.2x\n",arp->ar_data[10],arp->ar_data[11],arp->ar_data[12],arp->ar_data[13],arp->ar_data[14],arp->ar_data[15]);
  27.     printf("ip_dst %d.%d.%d.%d\n",arp->ar_data[16],arp->ar_data[17],arp->ar_data[18],arp->ar_data[19]);
  28. }
  29. int printpacket(char* packet,int len)
  30. {
  31. // typedef struct {
  32.     // uchar        et_dest[6];    /* Destination node        */
  33.     // uchar        et_src[6];    /* Source node            */
  34.     // ushort        et_protlen;    /* Protocol or length        */
  35.     // uchar        et_dsap;    /* 802 DSAP            */
  36.     // uchar        et_ssap;    /* 802 SSAP            */
  37.     // uchar        et_ctl;        /* 802 control            */
  38.     // uchar        et_snap1;    /* SNAP                */
  39.     // uchar        et_snap2;
  40.     // uchar        et_snap3;
  41.     // ushort        et_prot;    /* 802 protocol            */
  42. // } Ethernet_t;
  43.     Ethernet_t* eth =(Ethernet_t* )packet;
  44.     //printbuffer((unsigned char*)packet,len);
  45.     
  46.     printf("\net_dest %.2x%.2x%.2x%.2x%.2x%.2x\n", eth->et_dest[0],eth->et_dest[1],eth->et_dest[2],eth->et_dest[3],eth->et_dest[4],eth->et_dest[5]);
  47.     printf("et_src %.2x%.2x%.2x%.2x%.2x%.2x\n", eth->et_src[0],eth->et_src[1],eth->et_src[2],eth->et_src[3],eth->et_src[4],eth->et_src[5]);
  48.     if(isnotvlan()){
  49.         printf("et_protlen %x",eth->et_protlen);
  50.         printf("et_dsap %x\n",eth->et_dsap);
  51.         printf("et_ssap %x\n",eth->et_ssap);
  52.         printf("et_ctl %x\n",eth->et_ctl);
  53.         printf("et_snap1 %x\n",eth->et_snap1);
  54.         switch(eth->et_protlen){
  55.             case 0x608:
  56.                 printf("PROT_ARP");
  57.                 printarp((ARP_t * )((unsigned char*)eth+ETHER_HDR_SIZE),len-ETHER_HDR_SIZE);
  58.                 break;
  59.             case 0x8:  
  60.                 printf("PROT_IP");
  61.                 //printip((IP_t * )((unsigned char*)eth+ETHER_HDR_SIZE),len-ETHER_HDR_SIZE);
  62.                 break;
  63.             case 0x3680:
  64.                 printf("PROT_RARP");
  65.                 printarp((ARP_t * )((unsigned char*)eth+ETHER_HDR_SIZE),len-ETHER_HDR_SIZE);
  66.                 break;
  67.             case 0x81:
  68.                 printf("PROT_VLAN");
  69.                 break;
  70.         }
  71.         printf("\n");
  72.     }else{
  73.         VLAN_Ethernet_t *veth = (VLAN_Ethernet_t *)eth;
  74.         // uchar        vet_dest[6];    /* Destination node        */
  75.         // uchar        vet_src[6];    /* Source node            */
  76.         // ushort        vet_vlan_type;    /* PROT_VLAN            */
  77.         // ushort        vet_tag;    /* TAG of VLAN            */
  78.         // ushort        vet_type;    /* protocol type        */        
  79.         printf("vet_vlan_type %x\n",veth->vet_vlan_type);
  80.         printf("vet_tag %x\n",veth->vet_tag);
  81.         printf("vet_type %x\n",veth->vet_type);
  82.         
  83.         return VLAN_ETHER_HDR_SIZE;
  84.     }
  85. }
  86. void printip(IP_t* ip,int len)
  87. {
  88. // typedef struct {
  89. // uchar ip_hl_v; /* header length and version */
  90. // uchar ip_tos; /* type of service */
  91. // ushort ip_len; /* total length */
  92. // ushort ip_id; /* identification */
  93. // ushort ip_off; /* fragment offset field */
  94. // uchar ip_ttl; /* time to live */
  95. // uchar ip_p; /* protocol */
  96. // ushort ip_sum; /* checksum */
  97. // IPaddr_t ip_src; /* Source IP address */
  98. // IPaddr_t ip_dst; /* Destination IP address */
  99. // ushort udp_src; /* UDP source port */
  100. // ushort udp_dst; /* UDP destination port */
  101. // ushort udp_len; /* Length of UDP packet */
  102. // ushort udp_xsum; /* Checksum */
  103. // } IP_t;
  104. printf("ip_hl_v %x\n",ip->ip_hl_v);
  105. printf("ip_tos %x\n",ip->ip_tos);
  106. printf("ip_len %x\n",ip->ip_len);
  107. printf("ip_id %x\n",ip->ip_id);
  108. printf("ip_off %x\n",ip->ip_off);
  109. printf("ip_ttl %x\n",ip->ip_ttl);
  110. printf("ip_p %x\n",ip->ip_p);
  111. printf("ip_sum %x\n",ip->ip_sum);
  112.  
  113. if(17==ip->ip_p){
  114. unsigned char* p1;
  115. printf("UDP\n");
  116. printf("udp_src %x\n",ip->udp_src);
  117. printf("udp_dst %x\n",ip->udp_dst);
  118. printf("udp_len %x\n",ip->udp_len);
  119. printf("udp_xsum %x\n",ip->udp_xsum);
  120. p1 = (unsigned char*)&ip->ip_src;
  121. printf("ip_src %d %d %d %d\n",p1[0],p1[1],p1[2],p1[3]);
  122. p1 = (unsigned char*)&ip->ip_dst;
  123. printf("ip_dst %d %d %d %d\n",p1[0],p1[1],p1[2],p1[3]);
  124.  
  125. }else if(1==ip->ip_p){
  126. printf("ICMP\n");
  127. }
  128. }
  1. static int cpsw_send(struct eth_device *dev, volatile void *packet, int length)
  2. {
  3. struct cpsw_priv *priv = dev->priv;
  4. void *buffer;
  5. int len;
  6. int status;
  7. int i;
  8. <span style="color:#FF0000;">unsigned char* p=(unsigned char*)packet;
  9. //Ethernet_t *et = (Ethernet_t *)p;
  10. //IP_t *ip = (IP_t *)(p+ETHER_HDR_SIZE);
  11. printf("cpsw_send: length=%x\n",length);
  12. //00 0c 29 6a 86 4e
  13. // p[0]=0;
  14. // p[1]=0xc;
  15. // p[2]=0x29;
  16. // p[3]=0x6a;
  17. // p[4]=0x86;
  18. // p[5]=0x4e;
  19. printpacket(packet,length);
  20. printf("beging send ...\n");</span>

uboot arp地址解析的更多相关文章

  1. Wireshark - 观察 ARP 地址解析过程

    下面使用 Wireshark 分析 ARP 的工作过程.试验的机器:发送者机器(IP 地址:10.21.28.47,MAC 地址:68:f7:28:0f:32:2e)下文称为 HOSTA:目标机器(I ...

  2. ARP地址解析协议

    ARP地址解析协议:为IP地址到相应的硬件地址之间提供动态映射. 下面图为例说明地址解析协议的详细工作流程. 结合图中的序号进行说明. client通过FTP协议连接server时,首先解析器会把主机 ...

  3. ARP地址解析协议原理

    概述 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化. 对于IPv4来说,我们使用ARP地址解析协议来完成IP地址 ...

  4. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

  5. ARP:地址解析协议

    ARP是地址解析协议,简单语言解释一下工作原理.1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系.2:当源主机要发送数据时,首先检查ARP列表中 ...

  6. arp:地址解析协议(Address Resolution Protocol)(来自维基百科)

    地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...

  7. 网络协议抓包分析——ARP地址解析协议

    前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...

  8. DNS ARP地址解析原理

    ARP是地址解析协议 主机A与主机B之间如果要进行数据间的传输,需要获取对方的IP与物理地址(MAC),在只清楚ip的情况下,主机A向主机B请求链接,会先查找ARP高速缓存表,是否存在对应的主机B的i ...

  9. 第二章ARP——地址解析协议

    本章我们要讨论的问题是只对 T C P / I P协议簇有意义的I P地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为 48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络 ...

随机推荐

  1. Mac使用之常用快捷键

    正式工作了,公司配给了mac,很多命令跟windows有很大不同,为了自己更好的使用mac本,特此记录平时常用的快捷键命令. 1.复制.保存等:command+c/s等,与windows不同的是ctr ...

  2. sed -i 报错的情况

    是因为替换的变量中带/的目录名 将原来的/改成#

  3. Microsoft SQL Server学习(三)

    1.表:表示一个实体(客观存在的事物或抽象时间),可实现对实体的数据描述和数据操作. 2.表结构:二位平面(行.列) 3.数据类型: 类型名称 类型 整形 bit(只存储0.1) samllint i ...

  4. DB2 系统命令与配置参数大全

    主要包括4个部分,分别为: DB2 系统命令 DB2 数据库管理器配置参数 DB2 数据库系统配置参数 DB2 管理服务器(DAS)配置参数DB2 系统命令 dasauto - 自动启动 DB2 管理 ...

  5. 音视频】5.ffmpeg命令分类与使用

    GT其实平时也有一些处理音视频的个人或者亲人需求,熟练使用ffmpeg之后也不要借助图示化软件,一个命令基本可以搞定 G: 熟练使用ffmpeg命令!T :不要死记硬背,看一遍,自己找下规律,敲一遍, ...

  6. vs2013打包

    C#打包需要这个:InstallShield 2013 Limited Edition for Visual Studio  . 下载地址: InstallShield 2013 Limited Ed ...

  7. 洛谷——P2734 游戏 A Game

    P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...

  8. ubuntu 14.04 挂载window共享目录

    (1) 先在ubuntu系统里,新建一个目录用于挂载,目录假设为 /mnt/win: sudo mkdir /mnt/win (2)在windows系统,共享出一个文件夹,共享名称假设为www sud ...

  9. 剑指offer---以O(1)时间删除链表节点

    问题:删除链表节点 要求:以O(1)时间 对于删除指定索引的链表元素大家都很熟悉,思路一般是从头遍历链表直到指定索引位置删除元素,然后维护一下指针即可,时间复杂度O(n).代码如下: // 删除pos ...

  10. python学习,使用requests库来模拟登录github,post请求。

    这次我们要模拟登录的页面是 https://github.com/login 首先我们先尝试着登陆一遍分析一下请求, 打开开发者工具下的network选项, 可以很清楚的看到这个会话session,而 ...