Skip to content

Latest commit

 

History

History
115 lines (100 loc) · 3.04 KB

usb_moded-mac.c

File metadata and controls

115 lines (100 loc) · 3.04 KB
 
Aug 24, 2018
Aug 24, 2018
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
* @file usb_moded-mac.c
*
* Copyright (C) 2013-2018 Jolla. All rights reserved.
*
* @author: Philippe De Swert <philippe.deswert@jollamobile.com>
* @author: Simo Piiroinen <simo.piiroinen@jollamobile.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the Lesser GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the Lesser GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
Aug 24, 2018
Aug 24, 2018
24
25
26
#include <stdio.h>
#include "usb_moded-mac.h"
#include "usb_moded-log.h"
Aug 24, 2018
Aug 24, 2018
28
29
30
/* ========================================================================= *
* Prototypes
* ========================================================================= */
Aug 24, 2018
Aug 24, 2018
32
/* -- mac -- */
Aug 24, 2018
Aug 24, 2018
34
35
36
static void mac_random_ether_addr (unsigned char *addr);
void mac_generate_random_mac(void);
char *mac_read_mac (void);
Aug 24, 2018
Aug 24, 2018
38
39
40
/* ========================================================================= *
* Functions
* ========================================================================= */
Aug 24, 2018
Aug 24, 2018
42
static void mac_random_ether_addr(unsigned char *addr)
Aug 24, 2018
Aug 24, 2018
44
45
FILE *random;
size_t count = 0;
Aug 24, 2018
Aug 24, 2018
47
48
49
random = fopen("/dev/urandom", "r");
count = fread(addr, 1, 6, random);
fclose(random);
Aug 24, 2018
Aug 24, 2018
51
52
53
54
55
56
57
if(count > 0 )
{
addr [0] &= 0xfe; /* clear multicast bit */
addr [0] |= 0x02; /* set local assignment bit (IEEE802) */
}
else
log_warning("MAC generation failed!\n");
Aug 24, 2018
Aug 24, 2018
60
void mac_generate_random_mac (void)
Aug 24, 2018
Aug 24, 2018
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unsigned char addr[6];
int i;
FILE *g_ether;
log_debug("Getting random usb ethernet mac\n");
mac_random_ether_addr(addr);
g_ether = fopen("/etc/modprobe.d/g_ether.conf", "w");
if(!g_ether)
{
log_warning("Failed to write mac address to /etc/modprobe.d/g_ether.conf\n");
return;
}
fprintf(g_ether, "options g_ether host_addr=");
Aug 24, 2018
Aug 24, 2018
77
78
79
80
81
82
for(i=0; i<5; i++)
{
fprintf(g_ether, "%02x:",addr[i]);
}
fprintf(g_ether, "%02x\n",addr[i]);
fclose(g_ether);
Aug 14, 2013
Aug 14, 2013
84
Aug 24, 2018
Aug 24, 2018
85
char * mac_read_mac(void)
Aug 14, 2013
Aug 14, 2013
86
{
Aug 24, 2018
Aug 24, 2018
87
88
89
90
FILE *g_ether;
char *mac = NULL, *ret = NULL;
size_t read = 0;
int test = 0;
Aug 14, 2013
Aug 14, 2013
91
Aug 24, 2018
Aug 24, 2018
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
g_ether = fopen("/etc/modprobe.d/g_ether.conf", "r");
if(!g_ether)
{
log_warning("Failed to read mac address from /etc/modprobe.d/g_ether.conf\n");
return(NULL);
}
test = fseek(g_ether, 26, SEEK_SET);
if(test == -1)
{
fclose(g_ether);
return 0;
}
mac = malloc(sizeof(char) *17);
if(mac)
read = fread(mac, 1, 17, g_ether);
if(read == 17)
ret = strndup(mac,17);
else
ret = 0;
Oct 29, 2013
Oct 29, 2013
111
Aug 24, 2018
Aug 24, 2018
112
113
114
free(mac);
fclose(g_ether);
return(ret);
Aug 14, 2013
Aug 14, 2013
115
}