app/testpmd: fix multicast address pool leak
[dpdk.git] / examples / ptpclient / ptpclient.c
index d94eca0..1f1c9c9 100644 (file)
@@ -47,12 +47,6 @@ uint32_t ptp_enabled_port_mask;
 uint8_t ptp_enabled_port_nb;
 static uint8_t ptp_enabled_ports[RTE_MAX_ETHPORTS];
 
-static const struct rte_eth_conf port_conf_default = {
-       .rxmode = {
-               .max_rx_pkt_len = RTE_ETHER_MAX_LEN,
-       },
-};
-
 static const struct rte_ether_addr ether_multicast = {
        .addr_bytes = {0x01, 0x1b, 0x19, 0x0, 0x0, 0x0}
 };
@@ -96,7 +90,7 @@ struct sync_msg {
 struct follow_up_msg {
        struct ptp_header   hdr;
        struct tstamp       precise_origin_tstamp;
-       uint8_t             suffix[0];
+       uint8_t             suffix[];
 } __rte_packed;
 
 struct delay_req_msg {
@@ -108,7 +102,7 @@ struct delay_resp_msg {
        struct ptp_header    hdr;
        struct tstamp        rx_tstamp;
        struct port_id       req_port_id;
-       uint8_t              suffix[0];
+       uint8_t              suffix[];
 } __rte_packed;
 
 struct ptp_message {
@@ -178,7 +172,7 @@ static inline int
 port_init(uint16_t port, struct rte_mempool *mbuf_pool)
 {
        struct rte_eth_dev_info dev_info;
-       struct rte_eth_conf port_conf = port_conf_default;
+       struct rte_eth_conf port_conf;
        const uint16_t rx_rings = 1;
        const uint16_t tx_rings = 1;
        int retval;
@@ -189,6 +183,8 @@ port_init(uint16_t port, struct rte_mempool *mbuf_pool)
        if (!rte_eth_dev_is_valid_port(port))
                return -1;
 
+       memset(&port_conf, 0, sizeof(struct rte_eth_conf));
+
        retval = rte_eth_dev_info_get(port, &dev_info);
        if (retval != 0) {
                printf("Error during getting device (port %u) info: %s\n",
@@ -197,14 +193,14 @@ port_init(uint16_t port, struct rte_mempool *mbuf_pool)
                return retval;
        }
 
-       if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_TIMESTAMP)
-               port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_TIMESTAMP;
+       if (dev_info.rx_offload_capa & RTE_ETH_RX_OFFLOAD_TIMESTAMP)
+               port_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;
 
-       if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)
+       if (dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE)
                port_conf.txmode.offloads |=
-                       DEV_TX_OFFLOAD_MBUF_FAST_FREE;
+                       RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;
        /* Force full Tx path in the driver, required for IEEE1588 */
-       port_conf.txmode.offloads |= DEV_TX_OFFLOAD_MULTI_SEGS;
+       port_conf.txmode.offloads |= RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
 
        /* Configure the Ethernet device. */
        retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
@@ -390,6 +386,7 @@ parse_fup(struct ptpv2_data_slave_ordinary *ptp_data)
        struct ptp_header *ptp_hdr;
        struct clock_id *client_clkid;
        struct ptp_message *ptp_msg;
+       struct delay_req_msg *req_msg;
        struct rte_mbuf *created_pkt;
        struct tstamp *origin_tstamp;
        struct rte_ether_addr eth_multicast = ether_multicast;
@@ -427,7 +424,12 @@ parse_fup(struct ptpv2_data_slave_ordinary *ptp_data)
 
                created_pkt = rte_pktmbuf_alloc(mbuf_pool);
                pkt_size = sizeof(struct rte_ether_hdr) +
-                       sizeof(struct ptp_message);
+                       sizeof(struct delay_req_msg);
+
+               if (rte_pktmbuf_append(created_pkt, pkt_size) == NULL) {
+                       rte_pktmbuf_free(created_pkt);
+                       return;
+               }
                created_pkt->data_len = pkt_size;
                created_pkt->pkt_len = pkt_size;
                eth_hdr = rte_pktmbuf_mtod(created_pkt, struct rte_ether_hdr *);
@@ -437,22 +439,22 @@ parse_fup(struct ptpv2_data_slave_ordinary *ptp_data)
                rte_ether_addr_copy(&eth_multicast, &eth_hdr->dst_addr);
 
                eth_hdr->ether_type = htons(PTP_PROTOCOL);
-               ptp_msg = (struct ptp_message *)
-                       (rte_pktmbuf_mtod(created_pkt, char *) +
-                       sizeof(struct rte_ether_hdr));
-
-               ptp_msg->delay_req.hdr.seq_id = htons(ptp_data->seqID_SYNC);
-               ptp_msg->delay_req.hdr.msg_type = DELAY_REQ;
-               ptp_msg->delay_req.hdr.ver = 2;
-               ptp_msg->delay_req.hdr.control = 1;
-               ptp_msg->delay_req.hdr.log_message_interval = 127;
-               ptp_msg->delay_req.hdr.message_length =
+               req_msg = rte_pktmbuf_mtod_offset(created_pkt,
+                       struct delay_req_msg *, sizeof(struct
+                       rte_ether_hdr));
+
+               req_msg->hdr.seq_id = htons(ptp_data->seqID_SYNC);
+               req_msg->hdr.msg_type = DELAY_REQ;
+               req_msg->hdr.ver = 2;
+               req_msg->hdr.control = 1;
+               req_msg->hdr.log_message_interval = 127;
+               req_msg->hdr.message_length =
                        htons(sizeof(struct delay_req_msg));
-               ptp_msg->delay_req.hdr.domain_number = ptp_hdr->domain_number;
+               req_msg->hdr.domain_number = ptp_hdr->domain_number;
 
                /* Set up clock id. */
                client_clkid =
-                       &ptp_msg->delay_req.hdr.source_port_id.clock_id;
+                       &req_msg->hdr.source_port_id.clock_id;
 
                client_clkid->id[0] = eth_hdr->src_addr.addr_bytes[0];
                client_clkid->id[1] = eth_hdr->src_addr.addr_bytes[1];
@@ -468,7 +470,7 @@ parse_fup(struct ptpv2_data_slave_ordinary *ptp_data)
                           sizeof(struct clock_id));
 
                /* Enable flag for hardware timestamping. */
-               created_pkt->ol_flags |= PKT_TX_IEEE1588_TMST;
+               created_pkt->ol_flags |= RTE_MBUF_F_TX_IEEE1588_TMST;
 
                /*Read value from NIC to prevent latching with old value. */
                rte_eth_timesync_read_tx_timestamp(ptp_data->portid,
@@ -630,7 +632,7 @@ lcore_main(void)
                                continue;
 
                        /* Packet is parsed to determine which type. 8< */
-                       if (m->ol_flags & PKT_RX_IEEE1588_PTP)
+                       if (m->ol_flags & RTE_MBUF_F_RX_IEEE1588_PTP)
                                parse_ptp_frames(portid, m);
                        /* >8 End of packet is parsed to determine which type. */