X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Fnetwork.c;h=d598fcf014d2cd4236c18847a23019a70689ed9b;hp=7d9accd19f56ead4410906fb7394edc20a142b87;hb=1f3fae1fb25168aac187ff1881738c8ad53a8763;hpb=9889b48572e672f4535ca9dafd98d81146b7b834 diff --git a/utils/mount/network.c b/utils/mount/network.c index 7d9accd..d598fcf 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -1353,6 +1353,40 @@ nfs_nfs_port(struct mount_options *options, unsigned long *port) return 1; } +/* + * Returns TRUE and fills in @family if a valid NFS protocol option + * is found, or FALSE if the option was specified with an invalid value. + */ +int nfs_nfs_proto_family(struct mount_options *options, + sa_family_t *family) +{ + unsigned long protocol; + char *option; + +#ifdef HAVE_LIBTIRPC + *family = AF_UNSPEC; +#else + *family = AF_INET; +#endif + + switch (po_rightmost(options, nfs_transport_opttbl)) { + case 0: /* udp */ + return 1; + case 1: /* tcp */ + return 1; + case 2: /* proto */ + option = po_get(options, "proto"); + if (option != NULL) + return nfs_get_proto(option, family, &protocol); + } + + /* + * NFS transport protocol wasn't specified. Return the + * default address family. + */ + return 1; +} + /* * "mountprog" is supported only by the legacy mount command. The * kernel mount client does not support this option. @@ -1466,6 +1500,35 @@ nfs_mount_port(struct mount_options *options, unsigned long *port) return 1; } +/* + * Returns TRUE and fills in @family if a valid MNT protocol option + * is found, or FALSE if the option was specified with an invalid value. + */ +int nfs_mount_proto_family(struct mount_options *options, + sa_family_t *family) +{ + unsigned long protocol; + char *option; + +#ifdef HAVE_LIBTIRPC + *family = AF_UNSPEC; +#else + *family = AF_INET; +#endif + + option = po_get(options, "mountproto"); + if (option != NULL) + return nfs_get_proto(option, family, &protocol); + + /* + * MNT transport protocol wasn't specified. If the NFS + * transport protocol was specified, derive the family + * from that; otherwise, return the default family for + * NFS. + */ + return nfs_nfs_proto_family(options, family); +} + /** * nfs_options2pmap - set up pmap structs based on mount options * @options: pointer to mount options