implement --packet-limit for UDP server mode
This commit is contained in:
parent
a5dd273189
commit
360905ec56
@ -180,6 +180,8 @@ run_udp_server(fko_srv_options_t *opts)
|
|||||||
if(selval == 0)
|
if(selval == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* If we make it here then there is a datagram to process
|
||||||
|
*/
|
||||||
pkt_len = recvfrom(s_sock, msg, 5000, 0, (struct sockaddr *)&caddr, &clen);
|
pkt_len = recvfrom(s_sock, msg, 5000, 0, (struct sockaddr *)&caddr, &clen);
|
||||||
|
|
||||||
printf("-------------------------------------------------------\n");
|
printf("-------------------------------------------------------\n");
|
||||||
@ -198,20 +200,37 @@ run_udp_server(fko_srv_options_t *opts)
|
|||||||
|
|
||||||
/* Expect the data to not be too large
|
/* Expect the data to not be too large
|
||||||
*/
|
*/
|
||||||
if(pkt_len > MAX_SPA_PACKET_LEN)
|
if(pkt_len <= MAX_SPA_PACKET_LEN)
|
||||||
continue;
|
{
|
||||||
|
/* Copy the packet for SPA processing
|
||||||
|
*/
|
||||||
|
strlcpy((char *)opts->spa_pkt.packet_data, msg, pkt_len+1);
|
||||||
|
opts->spa_pkt.packet_data_len = pkt_len;
|
||||||
|
opts->spa_pkt.packet_proto = IPPROTO_UDP;
|
||||||
|
opts->spa_pkt.packet_src_ip = caddr.sin_addr.s_addr;
|
||||||
|
opts->spa_pkt.packet_dst_ip = saddr.sin_addr.s_addr;
|
||||||
|
opts->spa_pkt.packet_src_port = ntohs(caddr.sin_port);
|
||||||
|
opts->spa_pkt.packet_dst_port = ntohs(saddr.sin_port);
|
||||||
|
|
||||||
/* Copy the packet for SPA processing
|
incoming_spa(opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
opts->packet_ctr += 1;
|
||||||
|
if(opts->foreground == 1 && opts->verbose > 2)
|
||||||
|
log_msg(LOG_DEBUG, "run_udp_server() processed: %d packets", opts->packet_ctr);
|
||||||
|
|
||||||
|
/* Count the set of processed packets (pcap_dispatch() return
|
||||||
|
* value) - we use this as a comparison for --packet-limit regardless
|
||||||
|
* of SPA packet validity at this point.
|
||||||
*/
|
*/
|
||||||
strlcpy((char *)opts->spa_pkt.packet_data, msg, pkt_len+1);
|
if (opts->packet_ctr_limit && opts->packet_ctr >= opts->packet_ctr_limit)
|
||||||
opts->spa_pkt.packet_data_len = pkt_len;
|
{
|
||||||
opts->spa_pkt.packet_proto = IPPROTO_UDP;
|
log_msg(LOG_WARNING,
|
||||||
opts->spa_pkt.packet_src_ip = caddr.sin_addr.s_addr;
|
"* Incoming packet count limit of %i reached",
|
||||||
opts->spa_pkt.packet_dst_ip = saddr.sin_addr.s_addr;
|
opts->packet_ctr_limit
|
||||||
opts->spa_pkt.packet_src_port = ntohs(caddr.sin_port);
|
);
|
||||||
opts->spa_pkt.packet_dst_port = ntohs(saddr.sin_port);
|
return 1;
|
||||||
|
}
|
||||||
incoming_spa(opts);
|
|
||||||
|
|
||||||
} /* infinite while loop */
|
} /* infinite while loop */
|
||||||
|
|
||||||
|
|||||||
@ -2482,6 +2482,14 @@
|
|||||||
'function' => \&server_packet_limit,
|
'function' => \&server_packet_limit,
|
||||||
'fwknopd_cmdline' => "$fwknopdCmd $default_server_conf_args --packet-limit 1 $intf_str",
|
'fwknopd_cmdline' => "$fwknopdCmd $default_server_conf_args --packet-limit 1 $intf_str",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'category' => 'basic operations',
|
||||||
|
'subcategory' => 'server',
|
||||||
|
'detail' => 'UDP server --packet-limit 1 exit',
|
||||||
|
'function' => \&server_packet_limit,
|
||||||
|
'fwknopd_cmdline' => "$fwknopdCmd $default_server_conf_args --udp-server --packet-limit 1 $intf_str",
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
'category' => 'basic operations',
|
'category' => 'basic operations',
|
||||||
'subcategory' => 'server',
|
'subcategory' => 'server',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user