Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more
Diff: core/uip/NyLPC_cIPv4.c
- Revision:
- 48:00d211aac2ec
- Parent:
- 43:a182f2b5ff41
- Child:
- 57:bc4330dfa62f
diff -r d27b9b2dcac6 -r 00d211aac2ec core/uip/NyLPC_cIPv4.c
--- a/core/uip/NyLPC_cIPv4.c Sun Jul 28 01:07:37 2013 +0000
+++ b/core/uip/NyLPC_cIPv4.c Wed Aug 07 13:53:02 2013 +0000
@@ -118,11 +118,10 @@
}
tp=(NyLPC_TcUdpSocket_t*)p[i];
//パラメータの一致チェック
- if(i_lport!=tp->uip_udp_conn.lport)
- {
- continue;
+ if(i_lport==tp->uip_udp_conn.lport){
+ //unicast
+ return tp;
}
- return tp;
}
return NULL;
}
@@ -141,7 +140,7 @@
}
tp=(NyLPC_TcUdpSocket_t*)p[i];
//パラメータの一致チェック
- if(i_lport!=tp->uip_udp_conn.lport || NyLPC_TIPv4Addr_isEqual(i_mcast_ip,&(tp->uip_udp_conn.lipaddr)))
+ if(i_lport!=tp->uip_udp_conn.lport || (!NyLPC_TIPv4Addr_isEqual(i_mcast_ip,&(tp->uip_udp_conn.mcastaddr))))
{
continue;
}
@@ -463,44 +462,29 @@
NyLPC_TcIPv4_t* i_inst,
NyLPC_TcIPv4Payload_t* i_ipp)
{
- NyLPC_TcUdpSocket_t* sock;
- //Multicastか調べる
- if(NyLPC_TIPv4Addr_isEqualWithMask(&(i_ipp->header->destipaddr),&NyLPC_TIPv4Addr_MULTICAST,&NyLPC_TIPv4Addr_MULTICAST_MASK)){
- //Multicastパケット
-
- //チェックサムの計算
- if((NyLPC_TIPv4Header_makeTcpChecksum(i_ipp->header) != 0xffff))
- {
- //受信エラーのあるパケットはドロップ
- goto DROP;
- }
- //マルチキャストに参加している&&portの一致するソケットを検索
- sock=cSocketTbl_getMatchMulticastUdpSocket(&(i_inst->_socket_tbl),&(i_ipp->header->destipaddr),i_ipp->payload.udp->destport);
- if(sock==NULL)
- {
- goto DROP;
- }
+ NyLPC_TcUdpSocket_t* sock=NULL;
+ if(!NyLPC_TIPv4Addr_isEqual(&(i_ipp->header->destipaddr),&(i_inst->_ref_config->ip_addr)))
+ {
+ sock=cSocketTbl_getMatchUdpSocket(&(i_inst->_socket_tbl),i_ipp->payload.udp->destport);
}else{
- //ユニキャストパケット
-
- //自分自身のIPに対する呼び出し?
- if(!NyLPC_TIPv4Addr_isEqual(&(i_ipp->header->destipaddr),&(i_inst->_ref_config->ip_addr)))
- {
- //自分以外のパケットはドロップ
- goto DROP;
+ if(NyLPC_TIPv4Addr_isEqualWithMask(&(i_ipp->header->destipaddr),&NyLPC_TIPv4Addr_MULTICAST,&NyLPC_TIPv4Addr_MULTICAST_MASK)){
+ //MultiCast?
+ //マルチキャストに参加している&&portの一致するソケットを検索
+ sock=cSocketTbl_getMatchMulticastUdpSocket(&(i_inst->_socket_tbl),&(i_ipp->header->destipaddr),i_ipp->payload.udp->destport);
+ }else if(!NyLPC_TIPv4Addr_isEqual(&(i_ipp->header->destipaddr),&NyLPC_TIPv4Addr_BROADCAST)){
+ //Broadcast?
+ sock=cSocketTbl_getMatchUdpSocket(&(i_inst->_socket_tbl),i_ipp->payload.udp->destport);
}
- //チェックサムの計算
- if((NyLPC_TIPv4Header_makeTcpChecksum(i_ipp->header) != 0xffff))
- {
- //受信エラーのあるパケットはドロップ
- goto DROP;
- }
- //ポートの一致するUDPソケットを探す。
- sock=cSocketTbl_getMatchUdpSocket(&(i_inst->_socket_tbl),i_ipp->payload.udp->destport);
- if(sock==NULL)
- {
- goto DROP;
- }
+ }
+ if(sock==NULL)
+ {
+ goto DROP;
+ }
+ //パケットのエラーチェック
+ if((NyLPC_TIPv4Header_makeTcpChecksum(i_ipp->header) != 0xffff))
+ {
+ //受信エラーのあるパケットはドロップ
+ goto DROP;
}
//既存の接続を処理
return NyLPC_cUdpSocket_parseRx(sock,i_ipp);
MiMic Webservice library