Thread (71 messages) 71 messages, 6 authors, 2020-04-02

Re: [PATCH v11 04/26] RDMA/rtrs: core: lib functions shared between client and server modules

From: Jinpu Wang <jinpu.wang@cloud.ionos.com>
Date: 2020-03-30 10:34:15
Also in: linux-rdma

On Sat, Mar 28, 2020 at 5:26 AM Bart Van Assche [off-list ref] wrote:
On 2020-03-20 05:16, Jack Wang wrote:
quoted
+/**
+ * rtrs_str_to_sockaddr() - Convert rtrs address string to sockaddr
+ * @addr:    String representation of an addr (IPv4, IPv6 or IB GID):
+ *              - "ip:192.168.1.1"
+ *              - "ip:fe80::200:5aee:feaa:20a2"
+ *              - "gid:fe80::200:5aee:feaa:20a2"
+ * @len:        String address length
+ * @port:    Destination port
+ * @dst:     Destination sockaddr structure
+ *
+ * Returns 0 if conversion successful. Non-zero on error.
+ */
+static int rtrs_str_to_sockaddr(const char *addr, size_t len,
+                              short port, struct sockaddr_storage *dst)
+{
+     if (strncmp(addr, "gid:", 4) == 0) {
+             return rtrs_str_gid_to_sockaddr(addr + 4, len - 4, port, dst);
+     } else if (strncmp(addr, "ip:", 3) == 0) {
+             char port_str[8];
+             char *cpy;
+             int err;
+
+             snprintf(port_str, sizeof(port_str), "%u", port);
+             cpy = kstrndup(addr + 3, len - 3, GFP_KERNEL);
+             err = cpy ? inet_pton_with_scope(&init_net, AF_UNSPEC,
+                                              cpy, port_str, dst) : -ENOMEM;
+             kfree(cpy);
+
+             return err;
+     }
+     return -EPROTONOSUPPORT;
+}
Please use 'u16' or 'uint16_t' for port numbers instead of 'short'.
ok, will use u16.
quoted
+/**
+ * rtrs_addr_to_sockaddr() - convert path string "src,dst" to sockaddreses
+ * @str:     string containing source and destination addr of a path
+ *           separated by comma. I.e. "ip:1.1.1.1,ip:1.1.1.2". If str
+ *           contains only one address it's considered to be destination.
+ * @len:     string length
+ * @port:    will be set to port.
                ^^^^^^^^^^^^^^^^^^^
What does this mean? Please make comments easy to comprehend.
how about just "port number"?
quoted
+ * @addr:    will be set to the source/destination address or to NULL
+ *           if str doesn't contain any sorce address.
                                           ^^^^^
Is this perhaps a typo?
yes, should be "source".
quoted
+ *
+ * Returns zero if conversion successful. Non-zero otherwise.
+ */
+int rtrs_addr_to_sockaddr(const char *str, size_t len, short port,
                                                          ^^^^^
I think most kernel code uses type u16 for port numbers.
ok.
quoted
+                        struct rtrs_addr *addr)
+{
+     const char *d;
+
+     d = strchr(str, ',');
+     if (!d)
+             d = strchr(str, '@');
+     if (d) {
+             if (rtrs_str_to_sockaddr(str, d - str, 0, addr->src))
                                                      ^^^
Does this mean that the @port argument only applies to the destination
address? If so, please mention this in the comment above this function.
Yes, will update the comments.
quoted
+                     return -EINVAL;
+             d += 1;
+             len -= d - str;
+             str  = d;
+
+     } else {
+             addr->src = NULL;
+     }
+     return rtrs_str_to_sockaddr(str, len, port, addr->dst);
+}
+EXPORT_SYMBOL(rtrs_addr_to_sockaddr);
So this function either accepts ',' or '@' as separator between source
and destination address?  Shouldn't that be mentioned in the comment
block above the function?
Yes, will update the comment.
Thanks,

Bart.
Thanks Bart!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help