27 lines
		
	
	
	
		
			588 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			27 lines
		
	
	
	
		
			588 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include <linux/string.h>
							 | 
						||
| 
								 | 
							
								#include <linux/if_ether.h>
							 | 
						||
| 
								 | 
							
								#include <linux/ctype.h>
							 | 
						||
| 
								 | 
							
								#include <linux/kernel.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int mac_pton(const char *s, u8 *mac)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									int i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* XX:XX:XX:XX:XX:XX */
							 | 
						||
| 
								 | 
							
									if (strlen(s) < 3 * ETH_ALEN - 1)
							 | 
						||
| 
								 | 
							
										return 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Don't dirty result unless string is valid MAC. */
							 | 
						||
| 
								 | 
							
									for (i = 0; i < ETH_ALEN; i++) {
							 | 
						||
| 
								 | 
							
										if (!isxdigit(s[i * 3]) || !isxdigit(s[i * 3 + 1]))
							 | 
						||
| 
								 | 
							
											return 0;
							 | 
						||
| 
								 | 
							
										if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':')
							 | 
						||
| 
								 | 
							
											return 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									for (i = 0; i < ETH_ALEN; i++) {
							 | 
						||
| 
								 | 
							
										mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								EXPORT_SYMBOL(mac_pton);
							 |