uboot arp地址解析
common/cmd_cache.c
- int do_getmac(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
- {
- //usend d43d7e45371c 192.168.1.134 1234 1234 hhaa
- char ethsrc[6]={0xff ,0xff ,0xff ,0xff ,0xff, 0xff};
- char ethdst[6]={0xff ,0xff ,0xff ,0xff ,0xff, 0xff};
- _getmac(argv[3],ethsrc);
- getmacfromipaddress(argv[1],ethdst,argv[2],ethsrc);
- //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]);
- return 0;
- }
- U_BOOT_CMD (getmac, 6, 1, do_getmac,
- "getmac destip srcip srceth",
- "[operation type] [device number] [image address] [image size]\n"
- );
common/tftp.c
- int global_raw_reveive = 0;
- void getmacfromipaddress(const char* remoteip, char* remoteeth,const char* ourip,char* oureth)
- {
- /* and do the ARP request */
- IPaddr_t RemoteIP;
- IPaddr_t MyIP;
- RemoteIP= string_to_ip(remoteip);
- MyIP = string_to_ip(ourip);
- ArpRequestsend(RemoteIP,oureth,MyIP);
- global_raw_reveive = 1;
- eth_rx();
- global_raw_reveive = 0;
- // NetRxPacket = inpkt;
- // NetRxPacketLen = len;
- //printbuffer((unsigned char*)NetRxPacket,NetRxPacketLen);
- //_printarp((unsigned char*)NetRxPacket,NetRxPacketLen);
- return 1; /* waiting */
- }
net/net.c
- void ArpRequestsend(IPaddr_t remoteip,char* oureth,IPaddr_t ourip)
- {
- int i;
- volatile uchar *pkt;
- ARP_t *arp;
- pkt = NetTxPacket;
- pkt += NetSetEther(pkt, NetBcastAddr, PROT_ARP);
- arp = (ARP_t *) pkt;
- arp->ar_hrd = htons(ARP_ETHER);
- arp->ar_pro = htons(PROT_IP);
- arp->ar_hln = 6;
- arp->ar_pln = 4;
- arp->ar_op = htons(ARPOP_REQUEST);
- /* source ET addr */
- memcpy(&arp->ar_data[0], oureth, 6);
- /* source IP addr */
- NetWriteIP((uchar *) &arp->ar_data[6], ourip);
- for (i = 10; i < 16; ++i) {
- /* dest ET addr = 0 */
- arp->ar_data[i] = 0;
- }
- NetWriteIP((uchar *) &arp->ar_data[16], remoteip);
- (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
- }
- void
- NetReceive(volatile uchar *inpkt, int len)
- {
- Ethernet_t *et;
- IP_t *ip;
- ARP_t *arp;
- IPaddr_t tmp;
- IPaddr_t src_ip;
- int x;
- uchar *pkt;
- #if defined(CONFIG_CMD_CDP)
- int iscdp;
- #endif
- ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid;
- debug("packet received.%d\n", len);
- NetRxPacket = inpkt;
- NetRxPacketLen = len;
- et = (Ethernet_t *)inpkt;
- <span style="color:#FF0000;">if(global_raw_reveive){
- //global_raw_reveive=0;
- printpacket((Ethernet_t *)NetRxPacket,len);
- return;
- }</span>
driver/net/cpsw.c
- void printbuffer(unsigned char* buffer, int len)
- {
- int i;
- for(i=0;i<len;i++){
- printf("%2.2x ",buffer[i]);
- if((i&15)==15)printf("\n");
- }
- printf("\n");
- }
- #define printhex(a,b) printf(#b##"=%x\n",a->b);
- void printarp(ARP_t * arp,int len)
- {
- // ushort ar_hrd; /* Format of hardware address */
- // ushort ar_pro; /* Format of protocol address */
- // uchar ar_hln; /* Length of hardware address */
- // uchar ar_pln; /* Length of protocol address */
- // ushort ar_op; /* Operation */
- // uchar ar_data[0];
- printf("ar_hrd %x\n",arp->ar_hrd);
- printf("ar_pro %x\n",arp->ar_pro);
- printf("ar_hln %x\n",arp->ar_hln);
- printf("ar_pln %x\n",arp->ar_pln);
- printf("ar_op %x\n",arp->ar_op);
- 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]);
- printf("ip_src %d %d %d %d\n",arp->ar_data[6],arp->ar_data[7],arp->ar_data[8],arp->ar_data[9]);
- 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]);
- printf("ip_dst %d.%d.%d.%d\n",arp->ar_data[16],arp->ar_data[17],arp->ar_data[18],arp->ar_data[19]);
- }
- int printpacket(char* packet,int len)
- {
- // typedef struct {
- // uchar et_dest[6]; /* Destination node */
- // uchar et_src[6]; /* Source node */
- // ushort et_protlen; /* Protocol or length */
- // uchar et_dsap; /* 802 DSAP */
- // uchar et_ssap; /* 802 SSAP */
- // uchar et_ctl; /* 802 control */
- // uchar et_snap1; /* SNAP */
- // uchar et_snap2;
- // uchar et_snap3;
- // ushort et_prot; /* 802 protocol */
- // } Ethernet_t;
- Ethernet_t* eth =(Ethernet_t* )packet;
- //printbuffer((unsigned char*)packet,len);
- 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]);
- 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]);
- if(isnotvlan()){
- printf("et_protlen %x",eth->et_protlen);
- printf("et_dsap %x\n",eth->et_dsap);
- printf("et_ssap %x\n",eth->et_ssap);
- printf("et_ctl %x\n",eth->et_ctl);
- printf("et_snap1 %x\n",eth->et_snap1);
- switch(eth->et_protlen){
- case 0x608:
- printf("PROT_ARP");
- printarp((ARP_t * )((unsigned char*)eth+ETHER_HDR_SIZE),len-ETHER_HDR_SIZE);
- break;
- case 0x8:
- printf("PROT_IP");
- //printip((IP_t * )((unsigned char*)eth+ETHER_HDR_SIZE),len-ETHER_HDR_SIZE);
- break;
- case 0x3680:
- printf("PROT_RARP");
- printarp((ARP_t * )((unsigned char*)eth+ETHER_HDR_SIZE),len-ETHER_HDR_SIZE);
- break;
- case 0x81:
- printf("PROT_VLAN");
- break;
- }
- printf("\n");
- }else{
- VLAN_Ethernet_t *veth = (VLAN_Ethernet_t *)eth;
- // uchar vet_dest[6]; /* Destination node */
- // uchar vet_src[6]; /* Source node */
- // ushort vet_vlan_type; /* PROT_VLAN */
- // ushort vet_tag; /* TAG of VLAN */
- // ushort vet_type; /* protocol type */
- printf("vet_vlan_type %x\n",veth->vet_vlan_type);
- printf("vet_tag %x\n",veth->vet_tag);
- printf("vet_type %x\n",veth->vet_type);
- return VLAN_ETHER_HDR_SIZE;
- }
- }
- void printip(IP_t* ip,int len)
- {
- // typedef struct {
- // uchar ip_hl_v; /* header length and version */
- // uchar ip_tos; /* type of service */
- // ushort ip_len; /* total length */
- // ushort ip_id; /* identification */
- // ushort ip_off; /* fragment offset field */
- // uchar ip_ttl; /* time to live */
- // uchar ip_p; /* protocol */
- // ushort ip_sum; /* checksum */
- // IPaddr_t ip_src; /* Source IP address */
- // IPaddr_t ip_dst; /* Destination IP address */
- // ushort udp_src; /* UDP source port */
- // ushort udp_dst; /* UDP destination port */
- // ushort udp_len; /* Length of UDP packet */
- // ushort udp_xsum; /* Checksum */
- // } IP_t;
- printf("ip_hl_v %x\n",ip->ip_hl_v);
- printf("ip_tos %x\n",ip->ip_tos);
- printf("ip_len %x\n",ip->ip_len);
- printf("ip_id %x\n",ip->ip_id);
- printf("ip_off %x\n",ip->ip_off);
- printf("ip_ttl %x\n",ip->ip_ttl);
- printf("ip_p %x\n",ip->ip_p);
- printf("ip_sum %x\n",ip->ip_sum);
- if(17==ip->ip_p){
- unsigned char* p1;
- printf("UDP\n");
- printf("udp_src %x\n",ip->udp_src);
- printf("udp_dst %x\n",ip->udp_dst);
- printf("udp_len %x\n",ip->udp_len);
- printf("udp_xsum %x\n",ip->udp_xsum);
- p1 = (unsigned char*)&ip->ip_src;
- printf("ip_src %d %d %d %d\n",p1[0],p1[1],p1[2],p1[3]);
- p1 = (unsigned char*)&ip->ip_dst;
- printf("ip_dst %d %d %d %d\n",p1[0],p1[1],p1[2],p1[3]);
- }else if(1==ip->ip_p){
- printf("ICMP\n");
- }
- }
- static int cpsw_send(struct eth_device *dev, volatile void *packet, int length)
- {
- struct cpsw_priv *priv = dev->priv;
- void *buffer;
- int len;
- int status;
- int i;
- <span style="color:#FF0000;">unsigned char* p=(unsigned char*)packet;
- //Ethernet_t *et = (Ethernet_t *)p;
- //IP_t *ip = (IP_t *)(p+ETHER_HDR_SIZE);
- printf("cpsw_send: length=%x\n",length);
- //00 0c 29 6a 86 4e
- // p[0]=0;
- // p[1]=0xc;
- // p[2]=0x29;
- // p[3]=0x6a;
- // p[4]=0x86;
- // p[5]=0x4e;
- printpacket(packet,length);
- printf("beging send ...\n");</span>
uboot arp地址解析的更多相关文章
- Wireshark - 观察 ARP 地址解析过程
下面使用 Wireshark 分析 ARP 的工作过程.试验的机器:发送者机器(IP 地址:10.21.28.47,MAC 地址:68:f7:28:0f:32:2e)下文称为 HOSTA:目标机器(I ...
- ARP地址解析协议
ARP地址解析协议:为IP地址到相应的硬件地址之间提供动态映射. 下面图为例说明地址解析协议的详细工作流程. 结合图中的序号进行说明. client通过FTP协议连接server时,首先解析器会把主机 ...
- ARP地址解析协议原理
概述 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化. 对于IPv4来说,我们使用ARP地址解析协议来完成IP地址 ...
- 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议
4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...
- ARP:地址解析协议
ARP是地址解析协议,简单语言解释一下工作原理.1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系.2:当源主机要发送数据时,首先检查ARP列表中 ...
- arp:地址解析协议(Address Resolution Protocol)(来自维基百科)
地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...
- 网络协议抓包分析——ARP地址解析协议
前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...
- DNS ARP地址解析原理
ARP是地址解析协议 主机A与主机B之间如果要进行数据间的传输,需要获取对方的IP与物理地址(MAC),在只清楚ip的情况下,主机A向主机B请求链接,会先查找ARP高速缓存表,是否存在对应的主机B的i ...
- 第二章ARP——地址解析协议
本章我们要讨论的问题是只对 T C P / I P协议簇有意义的I P地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为 48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络 ...
随机推荐
- Mac使用之常用快捷键
正式工作了,公司配给了mac,很多命令跟windows有很大不同,为了自己更好的使用mac本,特此记录平时常用的快捷键命令. 1.复制.保存等:command+c/s等,与windows不同的是ctr ...
- sed -i 报错的情况
是因为替换的变量中带/的目录名 将原来的/改成#
- Microsoft SQL Server学习(三)
1.表:表示一个实体(客观存在的事物或抽象时间),可实现对实体的数据描述和数据操作. 2.表结构:二位平面(行.列) 3.数据类型: 类型名称 类型 整形 bit(只存储0.1) samllint i ...
- DB2 系统命令与配置参数大全
主要包括4个部分,分别为: DB2 系统命令 DB2 数据库管理器配置参数 DB2 数据库系统配置参数 DB2 管理服务器(DAS)配置参数DB2 系统命令 dasauto - 自动启动 DB2 管理 ...
- 音视频】5.ffmpeg命令分类与使用
GT其实平时也有一些处理音视频的个人或者亲人需求,熟练使用ffmpeg之后也不要借助图示化软件,一个命令基本可以搞定 G: 熟练使用ffmpeg命令!T :不要死记硬背,看一遍,自己找下规律,敲一遍, ...
- vs2013打包
C#打包需要这个:InstallShield 2013 Limited Edition for Visual Studio . 下载地址: InstallShield 2013 Limited Ed ...
- 洛谷——P2734 游戏 A Game
P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...
- ubuntu 14.04 挂载window共享目录
(1) 先在ubuntu系统里,新建一个目录用于挂载,目录假设为 /mnt/win: sudo mkdir /mnt/win (2)在windows系统,共享出一个文件夹,共享名称假设为www sud ...
- 剑指offer---以O(1)时间删除链表节点
问题:删除链表节点 要求:以O(1)时间 对于删除指定索引的链表元素大家都很熟悉,思路一般是从头遍历链表直到指定索引位置删除元素,然后维护一下指针即可,时间复杂度O(n).代码如下: // 删除pos ...
- python学习,使用requests库来模拟登录github,post请求。
这次我们要模拟登录的页面是 https://github.com/login 首先我们先尝试着登陆一遍分析一下请求, 打开开发者工具下的network选项, 可以很清楚的看到这个会话session,而 ...