+ /* Check that all four counters are valid, {pre,post}_*_{old,new}. */
+ if ((compression_counter_valid & 0x33) == 0x33)
+ {
+ counter_t pre_diff;
+ counter_t post_diff;
+
+ pre_diff = counter_diff (pre_compress_old, pre_compress_new);
+ post_diff = counter_diff (post_compress_old, post_compress_new);
+
+ /* If we compress, we're sending. */
+ compression_submit ("tx",
+ ((gauge_t) post_diff) / ((gauge_t) pre_diff));
+ }
+
+ /* Now check the other found counters. */
+ if ((compression_counter_valid & 0xcc) == 0xcc)
+ {
+ counter_t pre_diff;
+ counter_t post_diff;
+
+ pre_diff = counter_diff (pre_decompress_old, pre_decompress_new);
+ post_diff = counter_diff (post_decompress_old, post_decompress_new);
+
+ /* If we decompress, we're receiving. */
+ compression_submit ("rx",
+ ((gauge_t) pre_diff) / ((gauge_t) post_diff));
+ }
+
+ /* Now copy all the new counters to the old counters and move the flags
+ * up. */
+ pre_compress_old = pre_compress_new;
+ post_compress_old = post_compress_new;
+ pre_decompress_old = pre_decompress_new;
+ post_decompress_old = post_decompress_new;
+ compression_counter_valid = (compression_counter_valid & 0x0f) << 4;
+