[嵌入式网络系统设计]

lwip 组播

[复制链接]
11878|18
手机看帖
扫描二维码
随时随地手机跟帖
s05812229|  楼主 | 2013-4-25 08:45 | 显示全部楼层 |阅读模式

struct ip_addr SceneMulti_addr;//代表组播地址
struct in_addr Temp_Inaddr;
struct ip_addr LocalAddr;
  #if LWIP_IGMP
  inet_aton("224.1.1.4", &Temp_Inaddr);
LocalAddr.addr=0xC0A80032;
  SceneMulti_addr.addr=htonl(Temp_Inaddr.s_addr);
    i=igmp_joingroup(&LocalAddr, &SceneMulti_addr);
    #endif

有谁用过LWIP的组播功能的,我用的芯片是LM3S9B96.
igmp_joingroup这个函数不知道哪里找到?
或者有谁有合适的代码,能否借参考下。
评论
等一个人咖啡 2019-3-20 10:21 回复TA
看看 

相关帖子

自然的天逸| | 2013-5-10 17:55 | 显示全部楼层
这个函数是加入组播 给你一个自己实现的函数参考一下
/*******************************************************************************
* 函数名  : AddMultiGroup
* 功能    : 加入组播
* 输入    : McastAddr 组播IP地址
* 输出    : None
* 反回    : None
*******************************************************************************/
void AddMultiGroup(DINT8U *McastAddr)  
{
  send_mac_buf[0] = 0x01;
  send_mac_buf[1] = 0x00;
  send_mac_buf[2] = 0x5E;
  send_mac_buf[3] = McastAddr[1];
  send_mac_buf[4] = McastAddr[2];
  send_mac_buf[5] = McastAddr[3];                                                                          //对方MAC地址   IP 地址合成一个组播MAC
  memcpy(send_mac_buf + 6, netcf.Mac_Addr, 6);                                                    //本机MAC地址
  send_mac_buf[12]= 0x8;
  send_mac_buf[13]= 0x0;                                                                                    //Mac包长度
  send_mac_buf[14]=0x46;
  send_mac_buf[15]=0x00;                                                                                              //版本、首部长度及服务类型
  send_mac_buf[16]= 0;
  send_mac_buf[17]= 0x20;                                                                                                 //IP包总长度
  send_mac_buf[18]= (ip_pack_no >> 8) & 0xff;
  send_mac_buf[19]= ip_pack_no & 0xff;                                                                   //IP首部标识
  send_mac_buf[20]=0x0;
  send_mac_buf[21]= 0x0;                                                                                                  //标志和片偏移
  send_mac_buf[22]=0x40;                                                                                                 //生存时间
  send_mac_buf[23]= 0x02;                                                                                                  //IGMP协议
  send_mac_buf[24]=0;
  send_mac_buf[25]=0;                                                                                                          // IP首部校验和
  memcpy(send_mac_buf + 26, netcf.IP, 4);                                                            //本机IP地址
  memcpy(send_mac_buf + 30, McastAddr, 4);                                                            //对方IP地址
  send_mac_buf[34]=0x0;                                                                                                   // 保留
  send_mac_buf[35]=0x0;  
  send_mac_buf[36]=0x0;  
  send_mac_buf[37]=0x0;  
  send_mac_buf[38]=0x16;                                                                                                  //加入组
  send_mac_buf[39]=0x0;  
  send_mac_buf[40]=0;
  send_mac_buf[41]=0;                                                                                                        //IGMP校验和
  memcpy(send_mac_buf + 42, McastAddr, 4);
  Build_Ip_Crc(send_mac_buf);                                                                             //ip 首部校验
  Build_Igmp_Crc(send_mac_buf);                                                                                 //icmp 校验
  netcf.send_mac_packet(512, send_mac_buf, 0, send_mac_buf + 256);
}

使用特权

评论回复
自然的天逸| | 2013-5-10 17:59 | 显示全部楼层
这个 函数的功能就是告诉 路由器 或者交换机加入组播 等有组播消息 路由器和交换机就会转发给给机器了

使用特权

评论回复
自然的天逸| | 2013-5-10 18:00 | 显示全部楼层
不过 二层交换机 组播也是发广播

使用特权

评论回复
自然的天逸| | 2013-5-10 18:04 | 显示全部楼层
给你一个初始化 LWIP  函数
/*
;*****************************************************************************************************
;* º¯ÊýÃû³Æ : my_lwip_init
;* Ãè    Êö : Lwip³õʼ»¯
;* Êä¡¡  Èë : ÎÞ
;*        
;* Êä¡¡  ³ö : ÎÞ
;*****************************************************************************************************
;*/
void my_lwip_init(void)
{   
   
    struct ip_addr ipaddr, netmask,gw;
    struct ip_addr groupaddr;

   // uCMEM_Init(mymem, MY_MEM_SIZE);          //³õʼ»¯Ð­ÒéÕ»Êý¾Ý
    tcpip_init(tcpip_init_over, NULL);                                      /*³õʼ»¯TCP*/
  
      /*IPµØÖ·*/
    IP4_ADDR(&ipaddr, LocalCfg.IP[0],LocalCfg.IP[1],\
            LocalCfg.IP[2],LocalCfg.IP[3]);
      /*Íø¹ØµØÖ·*/
    IP4_ADDR(&gw,LocalCfg.IP_Gate[0],LocalCfg.IP_Gate[1],\
                LocalCfg.IP_Gate[2],LocalCfg.IP_Gate[3]);                   /*ÍøÂç½Ó¿ÚÅäÖÃ*/
     /*×ÓÍøÑÚÂë*/     
    IP4_ADDR(&netmask, LocalCfg.IP_Mask[0],LocalCfg.IP_Mask[1],\
             LocalCfg.IP_Mask[2],LocalCfg.IP_Mask[3]);
    /*×é²¥µØÖ·*/         
    IP4_ADDR(&groupaddr,LocalCfg.IP_Broadcast[0],LocalCfg.IP_Broadcast[1],\
                        LocalCfg.IP_Broadcast[2], LocalCfg.IP_Broadcast[3]);
            
    netif_add(&DM9000, &ipaddr, &netmask, &gw, NULL, ethernetif_init, tcpip_input);  
    netif_set_default(&DM9000);
    netif_set_up(&DM9000);  
     
    igmp_joingroup(&ipaddr, &groupaddr);                              /*ÍøÂç½Ó¿Ú¼ÓÈë×é²¥*/
    igmp_start(&DM9000);        
}

使用特权

评论回复
评论
s05812229 2013-5-23 08:16 回复TA
谢谢你 ! 
评分
参与人数 1威望 +3 收起 理由
s05812229 + 3 赞一个!
s05812229|  楼主 | 2013-5-13 13:51 | 显示全部楼层
自然的天逸 发表于 2013-5-10 18:04
给你一个初始化 LWIP  函数
/*
;********************************************************************** ...

请问 DM9000是什么

使用特权

评论回复
yangbinge| | 2013-5-13 14:15 | 显示全部楼层
s05812229 发表于 2013-5-13 13:51
请问 DM9000是什么


网口芯片

使用特权

评论回复
s05812229|  楼主 | 2013-5-14 08:40 | 显示全部楼层
yangbinge 发表于 2013-5-13 14:15
网口芯片

高手师傅,你有这方面的代码么?发一份给我调试下,好么?
yuxz666@126.com

使用特权

评论回复
自然的天逸| | 2013-5-14 16:35 | 显示全部楼层
移植不一样的 在你的机器上不一定可以调

使用特权

评论回复
weiyuliang| | 2014-2-24 23:11 | 显示全部楼层
组播是支持的,但是前提是需要打开LWIP 的IGMP协议,初始化的时候需要注意几个地方,

使用特权

评论回复
weiyuliang| | 2014-2-24 23:11 | 显示全部楼层
组播是支持的,但是前提是需要打开LWIP 的IGMP协议,初始化的时候需要注意几个地方,
将opt.h中的 LWIP_IGMP 设为1(打开)

使用特权

评论回复
wangguiyuan1983| | 2014-9-13 22:21 | 显示全部楼层
能实现组播!!!!

使用特权

评论回复
chao1717| | 2015-4-3 17:24 | 显示全部楼层
有人用过stm32f107+lwip组播通讯吗,我现在组播怎么都收不到数据
IP4_ADDR(&group_addr,239,255,255,238);  
err = igmp_joingroup(&LocalIP , &group_addr);  //&LocalIP    IP_ADDR_ANY
       upcb = udp_new();
       udp_bind(upcb, IP_ADDR_ANY, 5050);
       udp_connect(upcb, &group_addr , 38400);     // &group_addr
       udp_recv(upcb, udp_demo_callback, NULL);

使用特权

评论回复
lano| | 2015-7-15 10:46 | 显示全部楼层
楼上组播成功了吗?我的STM32+ENJ28c60+LWIP 组播不能跨网段,同网段下可以

使用特权

评论回复
lano| | 2015-7-15 10:48 | 显示全部楼层
跨网段组播是否需要组播服务器?

使用特权

评论回复
lllichuan| | 2015-8-13 16:26 | 显示全部楼层
自然的天逸 发表于 2013-5-14 16:35
移植不一样的 在你的机器上不一定可以调

能给我一个组播功能的代码么,现在我有一个项目要用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

91

帖子

0

粉丝