In port_open(), don't assume that UDS ports always have to have a zero
number. Check the transport directly to make the code cleaner. While at
it, switch all checks for the UDS in the port code to use a helper
function.

Signed-off-by: Miroslav Lichvar <mlich...@redhat.com>
---
 port.c | 40 +++++++++++++++++++++++-----------------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git a/port.c b/port.c
index 0a93c06..87f2c06 100644
--- a/port.c
+++ b/port.c
@@ -771,6 +771,11 @@ static int port_is_ieee8021as(struct port *p)
        return p->follow_up_info ? 1 : 0;
 }
 
+static int port_is_uds(struct port *p)
+{
+       return transport_type(p->trp) == TRANS_UDS;
+}
+
 static void port_management_send_error(struct port *p, struct port *ingress,
                                       struct ptp_message *msg, int error_id)
 {
@@ -1755,7 +1760,7 @@ int port_initialize(struct port *p)
        }
 
        /* No need to open rtnl socket on UDS port. */
-       if (transport_type(p->trp) != TRANS_UDS) {
+       if (!port_is_uds(p)) {
                /*
                 * The delay timer is usually started when the device
                 * transitions to PS_LISTENING. But, we are skipping the state
@@ -3008,7 +3013,6 @@ struct port *port_open(const char *phc_device,
        enum clock_type type = clock_type(clock);
        struct config *cfg = clock_config(clock);
        struct port *p = malloc(sizeof(*p));
-       enum transport_type transport;
        int i;
 
        if (!p) {
@@ -3038,24 +3042,28 @@ struct port *port_open(const char *phc_device,
 
        p->phc_index = phc_index;
        p->jbod = config_get_int(cfg, interface_name(interface), 
"boundary_clock_jbod");
-       transport = config_get_int(cfg, interface_name(interface), 
"network_transport");
        p->master_only = config_get_int(cfg, interface_name(interface), 
"masterOnly");
        p->bmca = config_get_int(cfg, interface_name(interface), "BMCA");
+       p->trp = transport_create(cfg, config_get_int(cfg,
+                             interface_name(interface), "network_transport"));
+       if (!p->trp) {
+               goto err_port;
+       }
 
-       if (p->bmca == BMCA_NOOP && transport != TRANS_UDS) {
+       if (p->bmca == BMCA_NOOP && !port_is_uds(p)) {
                if (p->master_only) {
                        p->state_machine = designated_master_fsm;
                } else if (clock_slave_only(clock)) {
                        p->state_machine = designated_slave_fsm;
                } else {
                        pr_err("Please enable at least one of masterOnly or 
clientOnly when BMCA == noop.\n");
-                       goto err_port;
+                       goto err_transport;
                }
        } else {
                p->state_machine = clock_slave_only(clock) ? ptp_slave_fsm : 
ptp_fsm;
        }
 
-       if (transport == TRANS_UDS) {
+       if (port_is_uds(p)) {
                ; /* UDS cannot have a PHC. */
        } else if (!interface_tsinfo_valid(interface)) {
                pr_warning("port %d: get_ts_info not supported", number);
@@ -3075,7 +3083,7 @@ struct port *port_open(const char *phc_device,
                        pr_err("port %d: /dev/ptp%d requested, ptp%d attached",
                               number, phc_index,
                               interface_phc_index(interface));
-                       goto err_port;
+                       goto err_transport;
                }
        }
 
@@ -3083,7 +3091,7 @@ struct port *port_open(const char *phc_device,
        p->iface = interface;
        p->asymmetry = config_get_int(cfg, p->name, "delayAsymmetry");
        p->asymmetry <<= 16;
-       p->announce_span = transport == TRANS_UDS ? 0 : ANNOUNCE_SPAN;
+       p->announce_span = port_is_uds(p) ? 0 : ANNOUNCE_SPAN;
        p->follow_up_info = config_get_int(cfg, p->name, "follow_up_info");
        p->freq_est_interval = config_get_int(cfg, p->name, 
"freq_est_interval");
        p->msg_interval_request = config_get_int(cfg, p->name, 
"msg_interval_request");
@@ -3096,10 +3104,6 @@ struct port *port_open(const char *phc_device,
        p->tx_timestamp_offset <<= 16;
        p->link_status = LINK_UP;
        p->clock = clock;
-       p->trp = transport_create(cfg, transport);
-       if (!p->trp) {
-               goto err_port;
-       }
        p->timestamping = timestamping;
        p->portIdentity.clockIdentity = clock_identity(clock);
        p->portIdentity.portNumber = number;
@@ -3108,23 +3112,25 @@ struct port *port_open(const char *phc_device,
        p->versionNumber = PTP_VERSION;
        p->slave_event_monitor = clock_slave_monitor(clock);
 
-       if (number && unicast_client_initialize(p)) {
+       if (!port_is_uds(p) && unicast_client_initialize(p)) {
                goto err_transport;
        }
        if (unicast_client_enabled(p) &&
            config_set_section_int(cfg, p->name, "hybrid_e2e", 1)) {
                goto err_uc_client;
        }
-       if (number && unicast_service_initialize(p)) {
+       if (!port_is_uds(p) && unicast_service_initialize(p)) {
                goto err_uc_client;
        }
        p->hybrid_e2e = config_get_int(cfg, p->name, "hybrid_e2e");
 
-       if (number && type == CLOCK_TYPE_P2P && p->delayMechanism != DM_P2P) {
+       if (!port_is_uds(p) && type == CLOCK_TYPE_P2P &&
+           p->delayMechanism != DM_P2P) {
                pr_err("port %d: P2P TC needs P2P ports", number);
                goto err_uc_service;
        }
-       if (number && type == CLOCK_TYPE_E2E && p->delayMechanism != DM_E2E) {
+       if (!port_is_uds(p) && type == CLOCK_TYPE_E2E &&
+           p->delayMechanism != DM_E2E) {
                pr_err("port %d: E2E TC needs E2E ports", number);
                goto err_uc_service;
        }
@@ -3158,7 +3164,7 @@ struct port *port_open(const char *phc_device,
 
        port_clear_fda(p, N_POLLFD);
        p->fault_fd = -1;
-       if (number) {
+       if (!port_is_uds(p)) {
                p->fault_fd = timerfd_create(CLOCK_MONOTONIC, 0);
                if (p->fault_fd < 0) {
                        pr_err("timerfd_create failed: %m");
-- 
2.26.2



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to