|
@@ -25,6 +25,7 @@
|
|
#include <linux/kallsyms.h>
|
|
#include <linux/kallsyms.h>
|
|
#include <linux/uaccess.h>
|
|
#include <linux/uaccess.h>
|
|
#include <linux/ioport.h>
|
|
#include <linux/ioport.h>
|
|
|
|
+#include <linux/bitrev.h>
|
|
#include <net/addrconf.h>
|
|
#include <net/addrconf.h>
|
|
|
|
|
|
#include <asm/page.h> /* for PAGE_SIZE */
|
|
#include <asm/page.h> /* for PAGE_SIZE */
|
|
@@ -681,11 +682,21 @@ static char *mac_address_string(char *buf, char *end, u8 *addr,
|
|
char mac_addr[sizeof("xx:xx:xx:xx:xx:xx")];
|
|
char mac_addr[sizeof("xx:xx:xx:xx:xx:xx")];
|
|
char *p = mac_addr;
|
|
char *p = mac_addr;
|
|
int i;
|
|
int i;
|
|
|
|
+ bool bitrev;
|
|
|
|
+ char separator;
|
|
|
|
+
|
|
|
|
+ if (fmt[1] == 'F') { /* FDDI canonical format */
|
|
|
|
+ bitrev = true;
|
|
|
|
+ separator = '-';
|
|
|
|
+ } else {
|
|
|
|
+ bitrev = false;
|
|
|
|
+ separator = ':';
|
|
|
|
+ }
|
|
|
|
|
|
for (i = 0; i < 6; i++) {
|
|
for (i = 0; i < 6; i++) {
|
|
- p = pack_hex_byte(p, addr[i]);
|
|
|
|
|
|
+ p = pack_hex_byte(p, bitrev ? bitrev8(addr[i]) : addr[i]);
|
|
if (fmt[0] == 'M' && i != 5)
|
|
if (fmt[0] == 'M' && i != 5)
|
|
- *p++ = ':';
|
|
|
|
|
|
+ *p++ = separator;
|
|
}
|
|
}
|
|
*p = '\0';
|
|
*p = '\0';
|
|
|
|
|
|
@@ -896,6 +907,10 @@ static char *uuid_string(char *buf, char *end, const u8 *addr,
|
|
* - 'M' For a 6-byte MAC address, it prints the address in the
|
|
* - 'M' For a 6-byte MAC address, it prints the address in the
|
|
* usual colon-separated hex notation
|
|
* usual colon-separated hex notation
|
|
* - 'm' For a 6-byte MAC address, it prints the hex address without colons
|
|
* - 'm' For a 6-byte MAC address, it prints the hex address without colons
|
|
|
|
+ * - 'MF' For a 6-byte MAC FDDI address, it prints the address
|
|
|
|
+ * with a dash-separated hex notation with bit reversed bytes
|
|
|
|
+ * - 'mF' For a 6-byte MAC FDDI address, it prints the address
|
|
|
|
+ * in hex notation without separators with bit reversed bytes
|
|
* - 'I' [46] for IPv4/IPv6 addresses printed in the usual way
|
|
* - 'I' [46] for IPv4/IPv6 addresses printed in the usual way
|
|
* IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
|
|
* IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
|
|
* IPv6 uses colon separated network-order 16 bit hex with leading 0's
|
|
* IPv6 uses colon separated network-order 16 bit hex with leading 0's
|
|
@@ -939,6 +954,7 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
|
return resource_string(buf, end, ptr, spec, fmt);
|
|
return resource_string(buf, end, ptr, spec, fmt);
|
|
case 'M': /* Colon separated: 00:01:02:03:04:05 */
|
|
case 'M': /* Colon separated: 00:01:02:03:04:05 */
|
|
case 'm': /* Contiguous: 000102030405 */
|
|
case 'm': /* Contiguous: 000102030405 */
|
|
|
|
+ /* [mM]F (FDDI, bit reversed) */
|
|
return mac_address_string(buf, end, ptr, spec, fmt);
|
|
return mac_address_string(buf, end, ptr, spec, fmt);
|
|
case 'I': /* Formatted IP supported
|
|
case 'I': /* Formatted IP supported
|
|
* 4: 1.2.3.4
|
|
* 4: 1.2.3.4
|