mirror of
https://dev.iopsys.eu/bbf/bbfdm.git
synced 2025-12-10 07:44:39 +01:00
Diagnostics: fix some issues in download and upload methods
This commit is contained in:
parent
660bb1fb04
commit
7aa5103599
3 changed files with 47 additions and 51 deletions
|
|
@ -627,7 +627,7 @@ static void http_download_per_packet(libtrace_packet_t *packet)
|
|||
return;
|
||||
|
||||
struct timeval http_download_ts = trace_get_timeval(packet);
|
||||
localtime_r(&(http_download_ts.tv_sec), &http_download_lt);
|
||||
gmtime_r(&(http_download_ts.tv_sec), &http_download_lt);
|
||||
strftime(s_now, sizeof s_now, "%Y-%m-%dT%H:%M:%S", &http_download_lt);
|
||||
|
||||
if (strcmp(tcp_flag, "SYN ") == 0 && diag_stats.random_seq == 0) {
|
||||
|
|
@ -655,24 +655,32 @@ static void http_download_per_packet(libtrace_packet_t *packet)
|
|||
|
||||
if (strcmp(tcp_flag, "ACK ") == 0 && ntohl(tcp->ack_seq) == diag_stats.ack_seq && diag_stats.first_data == 0) {
|
||||
snprintf(diag_stats.bomtime, sizeof(diag_stats.bomtime), "%s.%06ldZ", s_now, (long) http_download_ts.tv_usec);
|
||||
char *val = strstr(nexthdr,"Content-Length");
|
||||
char *pch, *pchr;
|
||||
val += strlen("Content-Length: ");
|
||||
pch = strtok_r(val, " \r\n\t", &pchr);
|
||||
diag_stats.test_bytes_received = atoi(pch);
|
||||
diag_stats.first_data = 1;
|
||||
return;
|
||||
char *val = strstr(nexthdr, "Content-Length");
|
||||
if (val) {
|
||||
char *pch, *pchr;
|
||||
|
||||
diag_stats.test_bytes_received = strlen(nexthdr);
|
||||
val += strlen("Content-Length: ");
|
||||
pch = strtok_r(val, " \r\n\t", &pchr);
|
||||
diag_stats.test_bytes_received += atoi(pch);
|
||||
diag_stats.first_data = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((strcmp(tcp_flag, "PSH ACK ") == 0 || strcmp(tcp_flag, "FIN PSH ACK ") == 0) && ntohl(tcp->ack_seq) == diag_stats.ack_seq) {
|
||||
if (diag_stats.first_data == 0) {
|
||||
snprintf(diag_stats.bomtime, sizeof(diag_stats.bomtime), "%s.%06ldZ", s_now, (long) http_download_ts.tv_usec);
|
||||
char *val = strstr(nexthdr,"Content-Length");
|
||||
char *pch, *pchr;
|
||||
val += strlen("Content-Length: ");
|
||||
pch = strtok_r(val, " \r\n\t", &pchr);
|
||||
diag_stats.test_bytes_received = atoi(pch);
|
||||
diag_stats.first_data = 1;
|
||||
char *val = strstr(nexthdr, "Content-Length");
|
||||
if (val) {
|
||||
char *pch, *pchr;
|
||||
|
||||
diag_stats.test_bytes_received = strlen(nexthdr);
|
||||
val += strlen("Content-Length: ");
|
||||
pch = strtok_r(val, " \r\n\t", &pchr);
|
||||
diag_stats.test_bytes_received = atoi(pch);
|
||||
diag_stats.first_data = 1;
|
||||
}
|
||||
}
|
||||
snprintf(diag_stats.eomtime, sizeof(diag_stats.eomtime), "%s.%06ldZ", s_now, (long) http_download_ts.tv_usec);
|
||||
read_next = 0;
|
||||
|
|
@ -690,7 +698,7 @@ static void ftp_download_per_packet(libtrace_packet_t *packet)
|
|||
return;
|
||||
|
||||
struct timeval ftp_download_ts = trace_get_timeval(packet);
|
||||
localtime_r(&(ftp_download_ts.tv_sec), &ftp_download_lt);
|
||||
gmtime_r(&(ftp_download_ts.tv_sec), &ftp_download_lt);
|
||||
strftime(s_now, sizeof s_now, "%Y-%m-%dT%H:%M:%S", &ftp_download_lt);
|
||||
|
||||
if (strcmp(tcp_flag, "PSH ACK ") == 0 && strlen(nexthdr) > strlen(FTP_SIZE_RESPONSE) && strncmp(nexthdr, FTP_SIZE_RESPONSE, strlen(FTP_SIZE_RESPONSE)) == 0) {
|
||||
|
|
@ -756,7 +764,7 @@ static void http_upload_per_packet(libtrace_packet_t *packet)
|
|||
return;
|
||||
|
||||
struct timeval http_upload_ts = trace_get_timeval(packet);
|
||||
localtime_r(&(http_upload_ts.tv_sec), &http_upload_lt);
|
||||
gmtime_r(&(http_upload_ts.tv_sec), &http_upload_lt);
|
||||
strftime(s_now, sizeof s_now, "%Y-%m-%dT%H:%M:%S", &http_upload_lt);
|
||||
|
||||
if (strcmp(tcp_flag, "SYN ") == 0 && diag_stats.random_seq == 0) {
|
||||
|
|
@ -829,7 +837,7 @@ static void ftp_upload_per_packet(libtrace_packet_t *packet)
|
|||
}
|
||||
|
||||
struct timeval ftp_upload_ts = trace_get_timeval(packet);
|
||||
localtime_r(&(ftp_upload_ts.tv_sec), &ftp_upload_lt);
|
||||
gmtime_r(&(ftp_upload_ts.tv_sec), &ftp_upload_lt);
|
||||
strftime(s_now, sizeof s_now, "%Y-%m-%dT%H:%M:%S", &ftp_upload_lt);
|
||||
|
||||
if (strcmp(tcp_flag, "SYN ") == 0 && diag_stats.ftp_syn == 1) {
|
||||
|
|
|
|||
|
|
@ -13,23 +13,26 @@ download_launch() {
|
|||
local proto tx_bytes_before rx_bytes_before time1 tx_bytes_after rx_bytes_after time2 periodtime error_code
|
||||
local url=$1
|
||||
local device=$2
|
||||
|
||||
[ "$url" = "" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.download.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; return; }
|
||||
local protocol=`uci_get_bbf_dmmap dmmap_diagnostics.download.ProtocolVersion Any`
|
||||
if [ "$protocol" == "IPv4" ]; then proto="-4"; elif [ "$protocol" == "IPv6" ]; then proto="-6"; else proto=""; fi
|
||||
if [ "$protocol" == "IPv4" ]; then proto="--ipv4"; elif [ "$protocol" == "IPv6" ]; then proto="--ipv6"; else proto=""; fi
|
||||
# Disable acceleration on Broadcom devices to capture all packets with tcpdump
|
||||
[ -e /usr/sbin/fcctl ] && { fcctl disable >/dev/null 2>&1; fcctl flush >/dev/null 2>&1; }
|
||||
tcpdump -i $device tcp -w ${CAPTURE_FILE} > /dev/null 2>&1 &
|
||||
PID=$!
|
||||
sleep 1
|
||||
if [ ${url:0:7} = http:// -o ${url:0:6} = ftp:// ]; then
|
||||
|
||||
tx_bytes_before=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.tx_bytes`
|
||||
rx_bytes_before=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.rx_bytes`
|
||||
time1=`date +%s`
|
||||
curl $proto --fail --silent --retry 1 --connect-timeout ${CONNECTION_TIMEOUT} -o ${DOWNLOAD_DIAGNOSTIC_FILE} $url
|
||||
curl $proto --fail --silent --connect-timeout ${CONNECTION_TIMEOUT} -o ${DOWNLOAD_DIAGNOSTIC_FILE} $url
|
||||
error_code="$?"
|
||||
time2=`date +%s`
|
||||
tx_bytes_after=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.tx_bytes`
|
||||
rx_bytes_after=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.rx_bytes`
|
||||
|
||||
[ "$error_code" == "6" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.download.DiagnosticState=Error_CannotResolveHostName; $UCI_COMMIT_BBF_DMMAP; kill $PID 2> /dev/null; return; }
|
||||
[ "$error_code" == "7" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.download.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; kill $PID 2> /dev/null; return; }
|
||||
[ "$error_code" == "22" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.download.DiagnosticState=Error_NoResponse; $UCI_COMMIT_BBF_DMMAP; kill $PID 2> /dev/null; return; }
|
||||
|
|
@ -40,6 +43,7 @@ download_launch() {
|
|||
tx_bytes=$((tx_bytes_after-tx_bytes_before))
|
||||
rx_bytes=$((rx_bytes_after-rx_bytes_before))
|
||||
periodtime=$(($((time2-time1))*1000000))
|
||||
|
||||
$UCI_SET_BBF_DMMAP dmmap_diagnostics.download.DiagnosticState=Complete
|
||||
$UCI_SET_BBF_DMMAP dmmap_diagnostics.download.TotalBytesReceived=$rx_bytes
|
||||
$UCI_SET_BBF_DMMAP dmmap_diagnostics.download.TotalBytesSent=$tx_bytes
|
||||
|
|
|
|||
|
|
@ -6,62 +6,46 @@
|
|||
source /usr/share/bbfdm/bbf_uci_api
|
||||
|
||||
CAPTURE_FILE="/tmp/upload_dump"
|
||||
UPLOAD_DIAGNOSTIC_FILE="/tmp/bbfdm_upload_diagnostic"
|
||||
CONNECTION_TIMEOUT=20
|
||||
UPLOAD_DIAGNOSTIC_FILE="/tmp/bbfdm_upload_diagnostic.bin"
|
||||
CONNECTION_TIMEOUT=10
|
||||
|
||||
upload_launch() {
|
||||
local proto tx_bytes_before rx_bytes_before time1 tx_bytes_after rx_bytes_after time2 res ba stc periodtime
|
||||
local url=$1
|
||||
local device=$2
|
||||
local size=$3
|
||||
|
||||
[ "$url" = "" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; return; }
|
||||
local protocol=`uci_get_bbf_dmmap dmmap_diagnostics.upload.ProtocolVersion Any`
|
||||
if [ "$protocol" == "IPv4" ]; then proto="-4"; elif [ "$protocol" == "IPv6" ]; then proto="-6"; else proto=""; fi
|
||||
if [ "$protocol" == "IPv4" ]; then proto="--ipv4"; elif [ "$protocol" == "IPv6" ]; then proto="--ipv6"; else proto=""; fi
|
||||
# Disable acceleration on Broadcom devices to capture all packets with tcpdump
|
||||
[ -e /usr/sbin/fcctl ] && { fcctl disable >/dev/null 2>&1; fcctl flush >/dev/null 2>&1; }
|
||||
tcpdump -i $device tcp -w ${CAPTURE_FILE} > /dev/null 2>&1 &
|
||||
PID=$!
|
||||
sleep 1
|
||||
dd if=/dev/zero of=${UPLOAD_DIAGNOSTIC_FILE} bs=${size} count=1 2>/dev/null
|
||||
if [ ${url:0:7} = http:// ]; then
|
||||
if [ ${url:0:7} = http:// -o ${url:0:6} = ftp:// ]; then
|
||||
|
||||
tx_bytes_before=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.tx_bytes`
|
||||
rx_bytes_before=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.rx_bytes`
|
||||
time1=`date +%s`
|
||||
res=$(curl $proto --fail --connect-timeout ${CONNECTION_TIMEOUT} -T ${UPLOAD_DIAGNOSTIC_FILE} $url 2>&1)
|
||||
curl $proto --fail --silent --connect-timeout ${CONNECTION_TIMEOUT} -T ${UPLOAD_DIAGNOSTIC_FILE} $url
|
||||
error_code="$?"
|
||||
time2=`date +%s`
|
||||
tx_bytes_after=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.tx_bytes`
|
||||
rx_bytes_after=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.rx_bytes`
|
||||
ba=`echo "$res" | grep "bad address"`
|
||||
[ -n "$ba" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
stc=`echo "$res" | grep "404 Not Found"`
|
||||
[ -n "$stc" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_NoResponse; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
stc=`echo "$res" |sed -n 3p|awk '{print $13}'`
|
||||
[ "$stc" != "100" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_TransferFailed; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
elif [ ${url:0:6} = ftp:// ]; then
|
||||
#add user and pass if they exist
|
||||
substr="@"
|
||||
if [ -z "${url##*$substr*}" ] ;then
|
||||
url=`echo $url |sed -e "s/ftp:\/\/\([^:]*\):\([^:]*\)@\(.*\)/-u \1:\2 ftp:\/\/\3/"`
|
||||
fi
|
||||
tx_bytes_before=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.tx_bytes`
|
||||
rx_bytes_before=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.rx_bytes`
|
||||
time1=`date +%s`
|
||||
res=$(curl $proto --fail --disable-epsv --ftp-pasv --connect-timeout ${CONNECTION_TIMEOUT} -T ${UPLOAD_DIAGNOSTIC_FILE} $url 2>&1)
|
||||
time2=`date +%s`
|
||||
tx_bytes_after=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.tx_bytes`
|
||||
rx_bytes_after=`ubus call network.device status "{'name':'$device'}" | jsonfilter -e @.statistics.rx_bytes`
|
||||
ba=`echo "$res" | grep "Couldn't resolve host"`
|
||||
[ -n "$ba" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; kill $PID 2> /dev/null; return; }
|
||||
stc=`echo "$res" | grep "Access denied"`
|
||||
[ -n "$stc" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_LoginFailed; $UCI_COMMIT_BBF_DMMAP; kill $PID 2> /dev/null; return; }
|
||||
stc=`echo "$res" | grep "Failed FTP upload"`
|
||||
[ -n "$stc" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_NoResponse; $UCI_COMMIT_BBF_DMMAP; kill $PID 2> /dev/null; return; }
|
||||
stc=`echo "$res" |tail -n 1 |awk '{print $(NF-11)}'`
|
||||
[ "$stc" != "100" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_TransferFailed; $UCI_COMMIT_BBF_DMMAP; kill $PID 2> /dev/null; return; }
|
||||
|
||||
[ "$error_code" == "6" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_CannotResolveHostName; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
[ "$error_code" == "7" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
[ "$error_code" == "22" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_NoResponse; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
[ "$error_code" == "27" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_IncorrectSize; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
[ "$error_code" == "28" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_Timeout; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
[ "$error_code" != "0" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_Other; $UCI_COMMIT_BBF_DMMAP; kill $PID &> /dev/null; return; }
|
||||
fi
|
||||
tx_bytes=$((tx_bytes_after-tx_bytes_before))
|
||||
rx_bytes=$((rx_bytes_after-rx_bytes_before))
|
||||
periodtime=$(($((time2-time1))*1000000))
|
||||
|
||||
$UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Complete
|
||||
$UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.TestBytesSent=$size
|
||||
$UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.TotalBytesReceived=$rx_bytes
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue