config: convert 'ptp_dst_mac', letting it be a per-port option.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
This commit is contained in:
		
							parent
							
								
									5fe77584b4
								
							
						
					
					
						commit
						a31f2d0ddf
					
				
							
								
								
									
										10
									
								
								config.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								config.c
									
									
									
									
									
								
							@ -213,6 +213,7 @@ struct config_item config_tab[] = {
 | 
				
			|||||||
	GLOB_ITEM_DBL("pi_proportional_scale", 0.0, 0.0, DBL_MAX),
 | 
						GLOB_ITEM_DBL("pi_proportional_scale", 0.0, 0.0, DBL_MAX),
 | 
				
			||||||
	GLOB_ITEM_INT("priority1", 128, 0, UINT8_MAX),
 | 
						GLOB_ITEM_INT("priority1", 128, 0, UINT8_MAX),
 | 
				
			||||||
	GLOB_ITEM_INT("priority2", 128, 0, UINT8_MAX),
 | 
						GLOB_ITEM_INT("priority2", 128, 0, UINT8_MAX),
 | 
				
			||||||
 | 
						PORT_ITEM_STR("ptp_dst_mac", "01:1B:19:00:00:00"),
 | 
				
			||||||
	GLOB_ITEM_INT("sanity_freq_limit", 200000000, 0, INT_MAX),
 | 
						GLOB_ITEM_INT("sanity_freq_limit", 200000000, 0, INT_MAX),
 | 
				
			||||||
	GLOB_ITEM_INT("slaveOnly", 0, 0, 1),
 | 
						GLOB_ITEM_INT("slaveOnly", 0, 0, 1),
 | 
				
			||||||
	GLOB_ITEM_DBL("step_threshold", 0.0, 0.0, DBL_MAX),
 | 
						GLOB_ITEM_DBL("step_threshold", 0.0, 0.0, DBL_MAX),
 | 
				
			||||||
@ -467,14 +468,7 @@ static enum parser_result parse_global_setting(const char *option,
 | 
				
			|||||||
	if (r != NOT_PARSED)
 | 
						if (r != NOT_PARSED)
 | 
				
			||||||
		return r;
 | 
							return r;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!strcmp(option, "ptp_dst_mac")) {
 | 
						if (!strcmp(option, "p2p_dst_mac")) {
 | 
				
			||||||
		if (MAC_LEN != sscanf(value, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
 | 
					 | 
				
			||||||
				      &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]))
 | 
					 | 
				
			||||||
			return BAD_VALUE;
 | 
					 | 
				
			||||||
		for (i = 0; i < MAC_LEN; i++)
 | 
					 | 
				
			||||||
			cfg->ptp_dst_mac[i] = mac[i];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	} else if (!strcmp(option, "p2p_dst_mac")) {
 | 
					 | 
				
			||||||
		if (MAC_LEN != sscanf(value, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
 | 
							if (MAC_LEN != sscanf(value, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
 | 
				
			||||||
				      &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]))
 | 
									      &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]))
 | 
				
			||||||
			return BAD_VALUE;
 | 
								return BAD_VALUE;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								config.h
									
									
									
									
									
								
							@ -47,7 +47,6 @@ struct config {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* the rest are legacy fields */
 | 
						/* the rest are legacy fields */
 | 
				
			||||||
	struct default_ds dds;
 | 
						struct default_ds dds;
 | 
				
			||||||
	unsigned char *ptp_dst_mac;
 | 
					 | 
				
			||||||
	unsigned char *p2p_dst_mac;
 | 
						unsigned char *p2p_dst_mac;
 | 
				
			||||||
	char *uds_address;
 | 
						char *uds_address;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								ether.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								ether.h
									
									
									
									
									
								
							@ -23,7 +23,6 @@
 | 
				
			|||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAC_LEN 6
 | 
					#define MAC_LEN 6
 | 
				
			||||||
#define PTP_DST_MAC 0x01, 0x1B, 0x19, 0x00, 0x00, 0x00
 | 
					 | 
				
			||||||
#define P2P_DST_MAC 0x01, 0x80, 0xC2, 0x00, 0x00, 0x0E
 | 
					#define P2P_DST_MAC 0x01, 0x80, 0xC2, 0x00, 0x00, 0x0E
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef uint8_t eth_addr[MAC_LEN];
 | 
					typedef uint8_t eth_addr[MAC_LEN];
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										8
									
								
								ptp4l.8
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								ptp4l.8
									
									
									
									
									
								
							@ -185,6 +185,10 @@ The default is 16 seconds.
 | 
				
			|||||||
Select the delay mechanism. Possible values are E2E, P2P and Auto.
 | 
					Select the delay mechanism. Possible values are E2E, P2P and Auto.
 | 
				
			||||||
The default is E2E.
 | 
					The default is E2E.
 | 
				
			||||||
.TP
 | 
					.TP
 | 
				
			||||||
 | 
					.B ptp_dst_mac
 | 
				
			||||||
 | 
					The MAC address to which PTP messages should be sent.
 | 
				
			||||||
 | 
					Relevant only with L2 transport. The default is 01:1B:19:00:00:00.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
.B network_transport
 | 
					.B network_transport
 | 
				
			||||||
Select the network transport. Possible values are UDPv4, UDPv6 and L2.
 | 
					Select the network transport. Possible values are UDPv4, UDPv6 and L2.
 | 
				
			||||||
The default is UDPv4.
 | 
					The default is UDPv4.
 | 
				
			||||||
@ -412,10 +416,6 @@ disabled. The default is 200000000 (20%).
 | 
				
			|||||||
The number of the SHM segment used by ntpshm servo.
 | 
					The number of the SHM segment used by ntpshm servo.
 | 
				
			||||||
The default is 0.
 | 
					The default is 0.
 | 
				
			||||||
.TP
 | 
					.TP
 | 
				
			||||||
.B ptp_dst_mac
 | 
					 | 
				
			||||||
The MAC address where should be PTP messages sent.
 | 
					 | 
				
			||||||
Relevant only with L2 transport. The default is 01:1B:19:00:00:00.
 | 
					 | 
				
			||||||
.TP
 | 
					 | 
				
			||||||
.B p2p_dst_mac
 | 
					.B p2p_dst_mac
 | 
				
			||||||
The MAC address where should be peer delay messages the PTP peer.
 | 
					The MAC address where should be peer delay messages the PTP peer.
 | 
				
			||||||
Relevant only with L2 transport. The default is 01:80:C2:00:00:0E.
 | 
					Relevant only with L2 transport. The default is 01:80:C2:00:00:0E.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								ptp4l.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								ptp4l.c
									
									
									
									
									
								
							@ -59,7 +59,6 @@ static struct config cfg_settings = {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.ptp_dst_mac = ptp_dst_mac,
 | 
					 | 
				
			||||||
	.p2p_dst_mac = p2p_dst_mac,
 | 
						.p2p_dst_mac = p2p_dst_mac,
 | 
				
			||||||
	.uds_address = uds_path,
 | 
						.uds_address = uds_path,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										16
									
								
								raw.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								raw.c
									
									
									
									
									
								
							@ -37,12 +37,14 @@
 | 
				
			|||||||
#include <linux/sockios.h>
 | 
					#include <linux/sockios.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "address.h"
 | 
					#include "address.h"
 | 
				
			||||||
 | 
					#include "config.h"
 | 
				
			||||||
#include "contain.h"
 | 
					#include "contain.h"
 | 
				
			||||||
#include "ether.h"
 | 
					#include "ether.h"
 | 
				
			||||||
#include "print.h"
 | 
					#include "print.h"
 | 
				
			||||||
#include "raw.h"
 | 
					#include "raw.h"
 | 
				
			||||||
#include "sk.h"
 | 
					#include "sk.h"
 | 
				
			||||||
#include "transport_private.h"
 | 
					#include "transport_private.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct raw {
 | 
					struct raw {
 | 
				
			||||||
	struct transport t;
 | 
						struct transport t;
 | 
				
			||||||
@ -147,10 +149,9 @@ static int raw_close(struct transport *t, struct fdarray *fda)
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned char ptp_dst_mac[MAC_LEN] = { PTP_DST_MAC };
 | 
					 | 
				
			||||||
unsigned char p2p_dst_mac[MAC_LEN] = { P2P_DST_MAC };
 | 
					unsigned char p2p_dst_mac[MAC_LEN] = { P2P_DST_MAC };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int open_socket(const char *name, int event)
 | 
					static int open_socket(const char *name, int event, unsigned char *ptp_dst_mac)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct sockaddr_ll addr;
 | 
						struct sockaddr_ll addr;
 | 
				
			||||||
	int fd, index;
 | 
						int fd, index;
 | 
				
			||||||
@ -202,19 +203,26 @@ static int raw_open(struct transport *t, const char *name,
 | 
				
			|||||||
		    struct fdarray *fda, enum timestamp_type ts_type)
 | 
							    struct fdarray *fda, enum timestamp_type ts_type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct raw *raw = container_of(t, struct raw, t);
 | 
						struct raw *raw = container_of(t, struct raw, t);
 | 
				
			||||||
 | 
						unsigned char ptp_dst_mac[MAC_LEN];
 | 
				
			||||||
	int efd, gfd;
 | 
						int efd, gfd;
 | 
				
			||||||
 | 
						char *str;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						str = config_get_string(t->cfg, name, "ptp_dst_mac");
 | 
				
			||||||
 | 
						if (str2mac(str, ptp_dst_mac)) {
 | 
				
			||||||
 | 
							pr_err("invalid ptp_dst_mac %s", str);
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	mac_to_addr(&raw->ptp_addr, ptp_dst_mac);
 | 
						mac_to_addr(&raw->ptp_addr, ptp_dst_mac);
 | 
				
			||||||
	mac_to_addr(&raw->p2p_addr, p2p_dst_mac);
 | 
						mac_to_addr(&raw->p2p_addr, p2p_dst_mac);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sk_interface_macaddr(name, &raw->src_addr))
 | 
						if (sk_interface_macaddr(name, &raw->src_addr))
 | 
				
			||||||
		goto no_mac;
 | 
							goto no_mac;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	efd = open_socket(name, 1);
 | 
						efd = open_socket(name, 1, ptp_dst_mac);
 | 
				
			||||||
	if (efd < 0)
 | 
						if (efd < 0)
 | 
				
			||||||
		goto no_event;
 | 
							goto no_event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gfd = open_socket(name, 0);
 | 
						gfd = open_socket(name, 0, ptp_dst_mac);
 | 
				
			||||||
	if (gfd < 0)
 | 
						if (gfd < 0)
 | 
				
			||||||
		goto no_general;
 | 
							goto no_general;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										5
									
								
								raw.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								raw.h
									
									
									
									
									
								
							@ -23,11 +23,6 @@
 | 
				
			|||||||
#include "fd.h"
 | 
					#include "fd.h"
 | 
				
			||||||
#include "transport.h"
 | 
					#include "transport.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * The MAC address to use for non-peer messages.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern unsigned char ptp_dst_mac[];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * The MAC address to use for peer messages.
 | 
					 * The MAC address to use for peer messages.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user