diff --git a/libpod/network/config.go b/libpod/network/config.go
index ce351129ed..294e235094 100644
--- a/libpod/network/config.go
+++ b/libpod/network/config.go
@@ -103,7 +103,9 @@ func (p PortMapConfig) Bytes() ([]byte, error) {
 
 // IPAMDHCP describes the ipamdhcp config
 type IPAMDHCP struct {
-	DHCP string `json:"type"`
+	DHCP   string                     `json:"type"`
+	Routes []IPAMRoute                `json:"routes,omitempty"`
+	Ranges [][]IPAMLocalHostRangeConf `json:"ranges,omitempty"`
 }
 
 // MacVLANConfig describes the macvlan config
@@ -111,6 +113,7 @@ type MacVLANConfig struct {
 	PluginType string   `json:"type"`
 	Master     string   `json:"master"`
 	IPAM       IPAMDHCP `json:"ipam"`
+	MTU        int      `json:"mtu,omitempty"`
 }
 
 // Bytes outputs the configuration as []byte
diff --git a/libpod/network/create.go b/libpod/network/create.go
index 88310a79cd..deacf487a1 100644
--- a/libpod/network/create.go
+++ b/libpod/network/create.go
@@ -249,6 +249,7 @@ func createBridge(name string, options entities.NetworkCreateOptions, runtimeCon
 
 func createMacVLAN(name string, options entities.NetworkCreateOptions, runtimeConfig *config.Config) (string, error) {
 	var (
+		mtu     int
 		plugins []CNIPlugins
 	)
 	liveNetNames, err := GetLiveNetworkNames()
@@ -283,7 +284,19 @@ func createMacVLAN(name string, options entities.NetworkCreateOptions, runtimeCo
 		}
 	}
 	ncList := NewNcList(name, version.Current(), options.Labels)
-	macvlan := NewMacVLANPlugin(parentNetworkDevice)
+	if val, ok := options.Options["mtu"]; ok {
+		intVal, err := strconv.Atoi(val)
+		if err != nil {
+			return "", err
+		}
+		if intVal > 0 {
+			mtu = intVal
+		}
+	}
+	macvlan, err := NewMacVLANPlugin(parentNetworkDevice, options.Gateway, &options.Range, &options.Subnet, mtu)
+	if err != nil {
+		return "", err
+	}
 	plugins = append(plugins, macvlan)
 	ncList["plugins"] = plugins
 	b, err := json.MarshalIndent(ncList, "", "   ")
diff --git a/libpod/network/netconflist.go b/libpod/network/netconflist.go
index ca6a4a70b8..9be98e78fd 100644
--- a/libpod/network/netconflist.go
+++ b/libpod/network/netconflist.go
@@ -172,19 +172,31 @@ func HasDNSNamePlugin(paths []string) bool {
 }
 
 // NewMacVLANPlugin creates a macvlanconfig with a given device name
-func NewMacVLANPlugin(device string) MacVLANConfig {
+func NewMacVLANPlugin(device string, gateway net.IP, ipRange *net.IPNet, subnet *net.IPNet, mtu int) (MacVLANConfig, error) {
 	i := IPAMDHCP{DHCP: "dhcp"}
+	if gateway != nil || ipRange != nil || subnet != nil {
+		ipam, err := NewIPAMLocalHostRange(subnet, ipRange, gateway)
+		if err != nil {
+			return MacVLANConfig{}, err
+		}
+		ranges := make([][]IPAMLocalHostRangeConf, 0)
+		ranges = append(ranges, ipam)
+		i.Ranges = ranges
+	}
 
 	m := MacVLANConfig{
 		PluginType: "macvlan",
 		IPAM:       i,
 	}
+	if mtu > 0 {
+		m.MTU = mtu
+	}
 	// CNI is supposed to use the default route if a
 	// parent device is not provided
 	if len(device) > 0 {
 		m.Master = device
 	}
-	return m
+	return m, nil
 }
 
 // IfPassesFilter filters NetworkListReport and returns true if the filter match the given config
diff --git a/test/e2e/network_test.go b/test/e2e/network_test.go
index 124ee7e291..c6010ba439 100644
--- a/test/e2e/network_test.go
+++ b/test/e2e/network_test.go
@@ -487,7 +487,6 @@ var _ = Describe("Podman network", func() {
 		inspect := podmanTest.Podman([]string{"network", "inspect", net})
 		inspect.WaitWithDefaultTimeout()
 		Expect(inspect.ExitCode()).To(BeZero())
-		fmt.Println(inspect.OutputToString())
 
 		out, err := inspect.jq(".[0].plugins[0].master")
 		Expect(err).To(BeNil())
@@ -513,4 +512,32 @@ var _ = Describe("Podman network", func() {
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(1))
 	})
+
+	It("podman network create macvlan with network info and options", func() {
+		net := "macvlan" + stringid.GenerateNonCryptoID()
+		nc := podmanTest.Podman([]string{"network", "create", "-d", "macvlan", "-o", "parent=lo", "-o", "mtu=1500", "--gateway", "192.168.1.254", "--subnet", "192.168.1.0/24", net})
+		nc.WaitWithDefaultTimeout()
+		defer podmanTest.removeCNINetwork(net)
+		Expect(nc.ExitCode()).To(Equal(0))
+
+		inspect := podmanTest.Podman([]string{"network", "inspect", net})
+		inspect.WaitWithDefaultTimeout()
+		Expect(inspect.ExitCode()).To(BeZero())
+
+		mtu, err := inspect.jq(".[0].plugins[0].mtu")
+		Expect(err).To(BeNil())
+		Expect(mtu).To(Equal("1500"))
+
+		gw, err := inspect.jq(".[0].plugins[0].ipam.ranges[0][0].gateway")
+		Expect(err).To(BeNil())
+		Expect(gw).To(Equal("\"192.168.1.254\""))
+
+		subnet, err := inspect.jq(".[0].plugins[0].ipam.ranges[0][0].subnet")
+		Expect(err).To(BeNil())
+		Expect(subnet).To(Equal("\"192.168.1.0/24\""))
+
+		nc = podmanTest.Podman([]string{"network", "rm", net})
+		nc.WaitWithDefaultTimeout()
+		Expect(nc.ExitCode()).To(Equal(0))
+	})
 })