335 lines
13 KiB
Diff
335 lines
13 KiB
Diff
Index: busybox-1_20_1/networking/interface.c
|
|
===================================================================
|
|
--- busybox-1_20_1.orig/networking/interface.c 2012-05-28 08:48:55.000000000 +0800
|
|
+++ busybox-1_20_1/networking/interface.c 2014-01-07 13:59:30.368460373 +0800
|
|
@@ -305,6 +305,20 @@
|
|
unsigned long rx_dropped; /* no space in linux buffers */
|
|
unsigned long tx_dropped; /* no space available in linux */
|
|
unsigned long rx_multicast; /* multicast packets received */
|
|
+
|
|
+#ifdef BRCM_CHANGE
|
|
+ /* BRCM change, JIRA 10503 - extended statistics */
|
|
+ unsigned long tx_multicast_packets; /* multicast packets transmitted */
|
|
+ unsigned long rx_multicast_bytes; /* multicast bytes recieved */
|
|
+ unsigned long tx_multicast_bytes; /* multicast bytes transmitted */
|
|
+ unsigned long rx_unicast_packets; /* unicast packets recieved */
|
|
+ unsigned long tx_unicast_packets; /* unicast packets transmitted */
|
|
+ unsigned long rx_broadcast_packets; /* broadcast packets recieved */
|
|
+ unsigned long tx_broadcast_packets; /* broadcast packets transmitted */
|
|
+ unsigned long rx_unknown_packets; /* unknown protocol packets recieved */
|
|
+ /* End BRCM change, JIRA 10503 */
|
|
+#endif
|
|
+
|
|
unsigned long rx_compressed;
|
|
unsigned long tx_compressed;
|
|
unsigned long collisions;
|
|
@@ -341,6 +355,12 @@
|
|
char hwaddr[32]; /* HW address */
|
|
int statistics_valid;
|
|
struct user_net_device_stats stats; /* statistics */
|
|
+
|
|
+#ifdef BRCM_CHANGE
|
|
+ /* BRCM change, JIRA 10503 - add statistics formatting*/
|
|
+ int procnetdev_vsn; /* Format of statistics */
|
|
+#endif
|
|
+
|
|
int keepalive; /* keepalive value for SLIP */
|
|
int outfill; /* outfill value for SLIP */
|
|
};
|
|
@@ -449,15 +469,33 @@
|
|
/* Lie about the size of the int pointed to for %n. */
|
|
#if INT_MAX == LONG_MAX
|
|
static const char *const ss_fmt[] = {
|
|
+#ifdef BRCM_CHANGE
|
|
+ "%n%llu%u%u%u%u%n%n%n%llu%u%u%u%u%u",
|
|
+ "%llu%llu%u%u%u%u%n%n%llu%llu%u%u%u%u%u",
|
|
+ "%llu%llu%u%u%u%u%u%u%llu%llu%u%u%u%u%u%u",
|
|
+
|
|
+ /* BRCM change, JIRA 10503 - add extended statistics format */
|
|
+ "%llu%llu%u%u%u%u%u%u%llu%llu%u%u%u%u%u%u%u%u%u%u%u%u%u%u"
|
|
+#else
|
|
"%n%llu%u%u%u%u%n%n%n%llu%u%u%u%u%u",
|
|
"%llu%llu%u%u%u%u%n%n%llu%llu%u%u%u%u%u",
|
|
"%llu%llu%u%u%u%u%u%u%llu%llu%u%u%u%u%u%u"
|
|
+#endif
|
|
};
|
|
#else
|
|
static const char *const ss_fmt[] = {
|
|
+#ifdef BRCM_CHANGE
|
|
+ "%n%llu%lu%lu%lu%lu%n%n%n%llu%lu%lu%lu%lu%lu",
|
|
+ "%llu%llu%lu%lu%lu%lu%n%n%llu%llu%lu%lu%lu%lu%lu",
|
|
+ "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu",
|
|
+
|
|
+/* BRCM change, JIRA 10503 - add extended statstics format */
|
|
+ "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu%lu%lu%lu%lu%lu%lu%lu%lu",
|
|
+#else
|
|
"%n%llu%lu%lu%lu%lu%n%n%n%llu%lu%lu%lu%lu%lu",
|
|
"%llu%llu%lu%lu%lu%lu%n%n%llu%llu%lu%lu%lu%lu%lu",
|
|
"%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu"
|
|
+#endif
|
|
};
|
|
|
|
#endif
|
|
@@ -466,6 +504,75 @@
|
|
{
|
|
memset(&ife->stats, 0, sizeof(struct user_net_device_stats));
|
|
|
|
+#ifdef BRCM_CHANGE
|
|
+ /* BRCM change, JIRA 10503 */
|
|
+ /* Record what format is being used (so we can print it out appropriately) */
|
|
+ ife->procnetdev_vsn = procnetdev_vsn;
|
|
+
|
|
+ /* Parse depending on the format of the file */
|
|
+ if(procnetdev_vsn < 3) {
|
|
+
|
|
+ sscanf(bp, ss_fmt[procnetdev_vsn],
|
|
+ &ife->stats.rx_bytes, /* missing for 0 */
|
|
+ &ife->stats.rx_packets,
|
|
+ &ife->stats.rx_errors,
|
|
+ &ife->stats.rx_dropped,
|
|
+ &ife->stats.rx_fifo_errors,
|
|
+ &ife->stats.rx_frame_errors,
|
|
+ &ife->stats.rx_compressed, /* missing for <= 1 */
|
|
+ &ife->stats.rx_multicast, /* missing for <= 1 */
|
|
+ &ife->stats.tx_bytes, /* missing for 0 */
|
|
+ &ife->stats.tx_packets,
|
|
+ &ife->stats.tx_errors,
|
|
+ &ife->stats.tx_dropped,
|
|
+ &ife->stats.tx_fifo_errors,
|
|
+ &ife->stats.collisions,
|
|
+ &ife->stats.tx_carrier_errors,
|
|
+ &ife->stats.tx_compressed /* missing for <= 1 */
|
|
+ );
|
|
+
|
|
+ if (procnetdev_vsn <= 1) {
|
|
+ if (procnetdev_vsn == 0) {
|
|
+ ife->stats.rx_bytes = 0;
|
|
+ ife->stats.tx_bytes = 0;
|
|
+ }
|
|
+ ife->stats.rx_multicast = 0;
|
|
+ ife->stats.rx_compressed = 0;
|
|
+ ife->stats.tx_compressed = 0;
|
|
+ }
|
|
+ }
|
|
+ /* BRCM change, JIRA 10503 - extened format reading */
|
|
+ else {
|
|
+ /* Read format from extended output, including multi/uni/broadcast data */
|
|
+ sscanf(bp, ss_fmt[procnetdev_vsn],
|
|
+ /* Basic statistics, just like procnetdev_vsn == 2 */
|
|
+ &ife->stats.rx_bytes,
|
|
+ &ife->stats.rx_packets,
|
|
+ &ife->stats.rx_errors,
|
|
+ &ife->stats.rx_dropped,
|
|
+ &ife->stats.rx_fifo_errors,
|
|
+ &ife->stats.rx_frame_errors,
|
|
+ &ife->stats.rx_compressed,
|
|
+ &ife->stats.rx_multicast,
|
|
+ &ife->stats.tx_bytes,
|
|
+ &ife->stats.tx_packets,
|
|
+ &ife->stats.tx_errors,
|
|
+ &ife->stats.tx_dropped,
|
|
+ &ife->stats.tx_fifo_errors,
|
|
+ &ife->stats.collisions,
|
|
+ &ife->stats.tx_carrier_errors,
|
|
+ &ife->stats.tx_compressed,
|
|
+
|
|
+ /* extended statistics */
|
|
+ &ife->stats.tx_multicast_packets, &ife->stats.rx_multicast_bytes, &ife->stats.tx_multicast_bytes,
|
|
+ &ife->stats.rx_unicast_packets, &ife->stats.tx_unicast_packets, &ife->stats.rx_broadcast_packets, &ife->stats.tx_broadcast_packets,
|
|
+ &ife->stats.rx_unknown_packets
|
|
+ );
|
|
+ }
|
|
+ /* End BRCM change, JIRA 10503 */
|
|
+
|
|
+#else
|
|
+
|
|
sscanf(bp, ss_fmt[procnetdev_vsn],
|
|
&ife->stats.rx_bytes, /* missing for 0 */
|
|
&ife->stats.rx_packets,
|
|
@@ -494,10 +601,16 @@
|
|
ife->stats.rx_compressed = 0;
|
|
ife->stats.tx_compressed = 0;
|
|
}
|
|
+#endif
|
|
}
|
|
|
|
static int procnetdev_version(char *buf)
|
|
{
|
|
+#ifdef BRCM_CHANGE
|
|
+ /* Look for labels in the heading that indicate what format is being used */
|
|
+ if (strstr(buf, "unicast"))
|
|
+ return 3;
|
|
+#endif
|
|
if (strstr(buf, "compressed"))
|
|
return 2;
|
|
if (strstr(buf, "bytes"))
|
|
@@ -574,6 +687,14 @@
|
|
|
|
procnetdev_vsn = procnetdev_version(buf);
|
|
|
|
+#ifdef BRCM_CHANGE
|
|
+ /* BRCM change, JIRA 10503 - support extended statsitics reading*/
|
|
+ /* For some formats, there's a third line of header that needs to be ignored */
|
|
+ if(procnetdev_vsn == 3)
|
|
+ fgets(buf, sizeof buf, fh); /* eat third line */
|
|
+ /* End BRCM change, JIRA 10503 */
|
|
+#endif
|
|
+
|
|
err = 0;
|
|
while (fgets(buf, sizeof buf, fh)) {
|
|
char *s, name[128];
|
|
@@ -881,7 +1002,12 @@
|
|
|
|
static const char TRext[] ALIGN1 = "\0\0\0Ki\0Mi\0Gi\0Ti";
|
|
|
|
+#ifdef BRCM_CHANGE
|
|
+/* BRCM change, JIRA 10503 - removed "end" pointer */
|
|
+static void print_bytes_scaled(unsigned long long ull)
|
|
+#else
|
|
static void print_bytes_scaled(unsigned long long ull, const char *end)
|
|
+#endif
|
|
{
|
|
unsigned long long int_part;
|
|
const char *ext;
|
|
@@ -901,7 +1027,13 @@
|
|
--i;
|
|
} while (i);
|
|
|
|
+#ifdef BRCM_CHANGE
|
|
+/* BRCM change, JIRA 10503 - removed "end" pointer */
|
|
+ printf("%llu (%llu.%u %sB)", ull, int_part, frac_part, ext);
|
|
+/* End BRCM change, JIRA 10503 */
|
|
+#else
|
|
printf("X bytes:%llu (%llu.%u %sB)%s", ull, int_part, frac_part, ext, end);
|
|
+#endif
|
|
}
|
|
|
|
|
|
@@ -1095,6 +1227,118 @@
|
|
/* If needed, display the interface statistics. */
|
|
|
|
if (ptr->statistics_valid) {
|
|
+#ifdef BRCM_CHANGE
|
|
+/* BRCM change, JIRA 10503 - add extended formats, accomodate print_bytes_scaled() change */
|
|
+ /* Depending on the format read in, output the statistics */
|
|
+ if(ptr->procnetdev_vsn <= 2) {
|
|
+ /* Legacy formats */
|
|
+
|
|
+ /* XXX: statistics are currently only printed for the primary address,
|
|
+ * not for the aliases, although strictly speaking they're shared
|
|
+ * by all addresses.
|
|
+ */
|
|
+ printf(" ");
|
|
+
|
|
+ printf("RX packets:%llu errors:%lu dropped:%lu overruns:%lu frame:%lu\n",
|
|
+ ptr->stats.rx_packets, ptr->stats.rx_errors,
|
|
+ ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors,
|
|
+ ptr->stats.rx_frame_errors);
|
|
+
|
|
+ printf("TX packets:%llu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n",
|
|
+ ptr->stats.tx_packets, ptr->stats.tx_errors,
|
|
+ ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors,
|
|
+ ptr->stats.tx_carrier_errors);
|
|
+ printf(" collisions:%lu ", ptr->stats.collisions);
|
|
+ if (can_compress)
|
|
+ printf("compressed:%lu ", ptr->stats.tx_compressed);
|
|
+
|
|
+ if (ptr->tx_queue_len != -1)
|
|
+ {
|
|
+ printf(" ");
|
|
+ printf("txqueuelen:%d ", ptr->tx_queue_len);
|
|
+ }
|
|
+
|
|
+ // Byte counts
|
|
+ printf(" ");
|
|
+ printf("RX bytes:");
|
|
+ print_bytes_scaled(ptr->stats.rx_bytes);
|
|
+ printf(" TX bytes:");
|
|
+ print_bytes_scaled(ptr->stats.tx_bytes);
|
|
+ printf("\n");
|
|
+ }
|
|
+ else {
|
|
+ /* Extended formats, including multi/uni/broadcast data */
|
|
+
|
|
+ /* XXX: statistics are currently only printed for the primary address,
|
|
+ * not for the aliases, although strictly speaking they're shared
|
|
+ * by all addresses.
|
|
+ */
|
|
+
|
|
+ // RX packet counts
|
|
+ printf(" ");
|
|
+ printf("RX packets:%llu multicast:%lu unicast:%lu broadcast:%lu",
|
|
+ ptr->stats.rx_packets, ptr->stats.rx_multicast,
|
|
+ ptr->stats.rx_unicast_packets, ptr->stats.rx_broadcast_packets);
|
|
+ if (can_compress)
|
|
+ printf(" compressed:%lu\n", ptr->stats.rx_compressed);
|
|
+ else
|
|
+ printf("\n");
|
|
+
|
|
+ // RX error counts
|
|
+ printf(" ");
|
|
+ printf("RX errors:%lu dropped:%lu overruns:%lu frame:%lu\n",
|
|
+ ptr->stats.rx_errors,
|
|
+ ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors,
|
|
+ ptr->stats.rx_frame_errors);
|
|
+
|
|
+ // printf("TX packets:%llu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n",
|
|
+ // ptr->stats.tx_packets, ptr->stats.tx_errors,
|
|
+ // ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors,
|
|
+ // ptr->stats.tx_carrier_errors);
|
|
+ // printf(" collisions:%lu ", ptr->stats.collisions);
|
|
+ // if (can_compress)
|
|
+ // printf("compressed:%lu ", ptr->stats.tx_compressed);
|
|
+
|
|
+ // TX packet counts
|
|
+ printf(" ");
|
|
+ printf("TX packets:%llu multicast:%lu unicast:%lu broadcast:%lu",
|
|
+ ptr->stats.tx_packets, ptr->stats.tx_multicast_packets,
|
|
+ ptr->stats.tx_unicast_packets, ptr->stats.tx_broadcast_packets);
|
|
+ if (can_compress)
|
|
+ printf(" compressed:%lu\n", ptr->stats.tx_compressed);
|
|
+ else
|
|
+ printf("\n");
|
|
+
|
|
+ // TX error counts
|
|
+ printf(" ");
|
|
+ printf("TX errors:%lu dropped:%lu overruns:%lu carrier:%lu collisions:%lu\n",
|
|
+ ptr->stats.tx_errors,
|
|
+ ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors,
|
|
+ ptr->stats.tx_carrier_errors, ptr->stats.collisions);
|
|
+
|
|
+
|
|
+
|
|
+ if (ptr->tx_queue_len != -1)
|
|
+ {
|
|
+ printf(" ");
|
|
+ printf("txqueuelen:%d\n", ptr->tx_queue_len);
|
|
+ }
|
|
+
|
|
+ // Byte counts
|
|
+ printf(" ");
|
|
+ printf("RX bytes:");
|
|
+ print_bytes_scaled(ptr->stats.rx_bytes);
|
|
+ printf(" TX bytes:");
|
|
+ print_bytes_scaled(ptr->stats.tx_bytes);
|
|
+ printf("\n ");
|
|
+ printf("RX multicast bytes:");
|
|
+ print_bytes_scaled(ptr->stats.rx_multicast_bytes);
|
|
+ printf(" TX multicast bytes:");
|
|
+ print_bytes_scaled(ptr->stats.tx_multicast_bytes);
|
|
+ printf("\n");
|
|
+ }
|
|
+/* End BRCM change, JIRA 10503 */
|
|
+#else
|
|
/* XXX: statistics are currently only printed for the primary address,
|
|
* not for the aliases, although strictly speaking they're shared
|
|
* by all addresses.
|
|
@@ -1121,6 +1365,7 @@
|
|
printf("\n R");
|
|
print_bytes_scaled(ptr->stats.rx_bytes, " T");
|
|
print_bytes_scaled(ptr->stats.tx_bytes, "\n");
|
|
+#endif
|
|
}
|
|
|
|
if (ptr->map.irq || ptr->map.mem_start
|