basic change for godoc
This commit is contained in:
@@ -14,7 +14,7 @@ func newVersionCommand(cli *client.Client) *cobra.Command {
|
|||||||
Short: "Print the version number of gotgt",
|
Short: "Print the version number of gotgt",
|
||||||
Long: `All software has versions. This is Gotgt 's`,
|
Long: `All software has versions. This is Gotgt 's`,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Printf("Gotgt %s -- HEAD\n", version.VERSION)
|
fmt.Printf("Gotgt %s -- HEAD\n", version.Version)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return cmd
|
return cmd
|
||||||
|
|||||||
@@ -177,8 +177,10 @@ type SCSICommand struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ITNexus struct {
|
type ITNexus struct {
|
||||||
ID uuid.UUID `json:"id"` /*UUIDv1*/
|
// UUID v1
|
||||||
Tag string `json:"Tag"` /*For protocal spec identifer*/
|
ID uuid.UUID `json:"id"`
|
||||||
|
// For protocal spec identifer
|
||||||
|
Tag string `json:"Tag"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ITNexusLuInfo struct {
|
type ITNexusLuInfo struct {
|
||||||
@@ -346,13 +348,17 @@ type SCSIDeviceProtocol interface {
|
|||||||
ExitLu(lu *SCSILu) error
|
ExitLu(lu *SCSILu) error
|
||||||
}
|
}
|
||||||
type ModePage struct {
|
type ModePage struct {
|
||||||
Pcode uint8 // Page code
|
// Page code
|
||||||
SubPcode uint8 // Sub page code
|
PageCode uint8
|
||||||
Data []byte // Rest of mode page info
|
// Sub page code
|
||||||
|
SubPageCode uint8
|
||||||
|
// Rest of mode page info
|
||||||
|
Data []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
type SCSIReservation struct {
|
type SCSIReservation struct {
|
||||||
ID uuid.UUID //Internal Reservation ID
|
// Internal reservation ID
|
||||||
|
ID uuid.UUID
|
||||||
Key uint64
|
Key uint64
|
||||||
ITNexusID uuid.UUID
|
ITNexusID uuid.UUID
|
||||||
Scope uint8
|
Scope uint8
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Package apiserver contains the code that provides a rest.ful api service.
|
// Package apiserver contains the code that provides a rest.ful API service.
|
||||||
package apiserver
|
package apiserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Package httputils contains a bunch of HTTP utility code, some generic
|
||||||
package httputils
|
package httputils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -157,11 +159,11 @@ func WriteJSON(w http.ResponseWriter, code int, v interface{}) error {
|
|||||||
// It panics if the context value does not have version.Version type.
|
// It panics if the context value does not have version.Version type.
|
||||||
func VersionFromContext(ctx context.Context) string {
|
func VersionFromContext(ctx context.Context) string {
|
||||||
if ctx == nil {
|
if ctx == nil {
|
||||||
return version.VERSION
|
return version.Version
|
||||||
}
|
}
|
||||||
val := ctx.Value(APIVersionKey)
|
val := ctx.Value(APIVersionKey)
|
||||||
if val == nil {
|
if val == nil {
|
||||||
return version.VERSION
|
return version.Version
|
||||||
}
|
}
|
||||||
return val.(string)
|
return val.(string)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Package config contains how to get/save config parameters from file.
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
18
pkg/scsi/backingstore/backingstore.go
Normal file
18
pkg/scsi/backingstore/backingstore.go
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The GoStor Authors All rights reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Package backingstore provides the plugin to connect backend storage.
|
||||||
|
package backingstore
|
||||||
@@ -164,7 +164,7 @@ write:
|
|||||||
glog.V(2).Infof("write data at %d for length %d", offset, length)
|
glog.V(2).Infof("write data at %d for length %d", offset, length)
|
||||||
var pg *api.ModePage
|
var pg *api.ModePage
|
||||||
for _, p := range lu.ModePages {
|
for _, p := range lu.ModePages {
|
||||||
if p.Pcode == 0x08 && p.SubPcode == 0 {
|
if p.PageCode == 0x08 && p.SubPageCode == 0 {
|
||||||
pg = &p
|
pg = &p
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2015 The GoStor Authors All rights reserved.
|
Copyright 2016 The GoStor Authors All rights reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import "errors"
|
|||||||
|
|
||||||
type SCSIError struct {
|
type SCSIError struct {
|
||||||
errno byte
|
errno byte
|
||||||
Err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -58,7 +58,7 @@ var (
|
|||||||
type SCSISubError uint16
|
type SCSISubError uint16
|
||||||
|
|
||||||
var (
|
var (
|
||||||
/* Key 0: No Sense Errors */
|
// Key 0: No Sense Errors
|
||||||
NO_ADDITIONAL_SENSE SCSISubError = 0x0000
|
NO_ADDITIONAL_SENSE SCSISubError = 0x0000
|
||||||
ASC_MARK SCSISubError = 0x0001
|
ASC_MARK SCSISubError = 0x0001
|
||||||
ASC_EOM SCSISubError = 0x0002
|
ASC_EOM SCSISubError = 0x0002
|
||||||
@@ -67,14 +67,14 @@ var (
|
|||||||
ASC_OP_IN_PROGRESS SCSISubError = 0x0016
|
ASC_OP_IN_PROGRESS SCSISubError = 0x0016
|
||||||
ASC_DRIVE_REQUIRES_CLEANING SCSISubError = 0x8282
|
ASC_DRIVE_REQUIRES_CLEANING SCSISubError = 0x8282
|
||||||
|
|
||||||
/* Key 1: Recovered Errors */
|
// Key 1: Recovered Errors
|
||||||
ASC_WRITE_ERROR SCSISubError = 0x0c00
|
ASC_WRITE_ERROR SCSISubError = 0x0c00
|
||||||
ASC_READ_ERROR SCSISubError = 0x1100
|
ASC_READ_ERROR SCSISubError = 0x1100
|
||||||
ASC_RECOVERED_WITH_RETRYS SCSISubError = 0x1701
|
ASC_RECOVERED_WITH_RETRYS SCSISubError = 0x1701
|
||||||
ASC_MEDIA_LOAD_EJECT_ERROR SCSISubError = 0x5300
|
ASC_MEDIA_LOAD_EJECT_ERROR SCSISubError = 0x5300
|
||||||
ASC_FAILURE_PREDICTION SCSISubError = 0x5d00
|
ASC_FAILURE_PREDICTION SCSISubError = 0x5d00
|
||||||
|
|
||||||
/* Key 2: Not ready */
|
// Key 2: Not ready
|
||||||
ASC_CAUSE_NOT_REPORTABLE SCSISubError = 0x0400
|
ASC_CAUSE_NOT_REPORTABLE SCSISubError = 0x0400
|
||||||
ASC_BECOMING_READY SCSISubError = 0x0401
|
ASC_BECOMING_READY SCSISubError = 0x0401
|
||||||
ASC_INITIALIZING_REQUIRED SCSISubError = 0x0402
|
ASC_INITIALIZING_REQUIRED SCSISubError = 0x0402
|
||||||
@@ -83,7 +83,7 @@ var (
|
|||||||
ASC_MEDIUM_NOT_PRESENT SCSISubError = 0x3a00
|
ASC_MEDIUM_NOT_PRESENT SCSISubError = 0x3a00
|
||||||
ASC_LOGICAL_UNIT_NOT_CONFIG SCSISubError = 0x3e00
|
ASC_LOGICAL_UNIT_NOT_CONFIG SCSISubError = 0x3e00
|
||||||
|
|
||||||
/* Key 3: Medium Errors */
|
// Key 3: Medium Errors
|
||||||
ASC_UNRECOVERED_READ SCSISubError = 0x1100
|
ASC_UNRECOVERED_READ SCSISubError = 0x1100
|
||||||
ASC_RECORDED_ENTITY_NOT_FOUND SCSISubError = 0x1400
|
ASC_RECORDED_ENTITY_NOT_FOUND SCSISubError = 0x1400
|
||||||
ASC_UNKNOWN_FORMAT SCSISubError = 0x3001
|
ASC_UNKNOWN_FORMAT SCSISubError = 0x3001
|
||||||
@@ -94,7 +94,7 @@ var (
|
|||||||
ASC_CARTRIDGE_FAULT SCSISubError = 0x5200
|
ASC_CARTRIDGE_FAULT SCSISubError = 0x5200
|
||||||
ASC_MEDIA_LOAD_OR_EJECT_FAILED SCSISubError = 0x5300
|
ASC_MEDIA_LOAD_OR_EJECT_FAILED SCSISubError = 0x5300
|
||||||
|
|
||||||
/* Key 4: Hardware Failure */
|
// Key 4: Hardware Failure
|
||||||
ASC_COMPRESSION_CHECK SCSISubError = 0x0c04
|
ASC_COMPRESSION_CHECK SCSISubError = 0x0c04
|
||||||
ASC_DECOMPRESSION_CRC SCSISubError = 0x110d
|
ASC_DECOMPRESSION_CRC SCSISubError = 0x110d
|
||||||
ASC_MECHANICAL_POSITIONING_ERROR SCSISubError = 0x1501
|
ASC_MECHANICAL_POSITIONING_ERROR SCSISubError = 0x1501
|
||||||
@@ -103,7 +103,7 @@ var (
|
|||||||
ASC_INTERNAL_TGT_FAILURE SCSISubError = 0x4400
|
ASC_INTERNAL_TGT_FAILURE SCSISubError = 0x4400
|
||||||
ASC_ERASE_FAILURE SCSISubError = 0x5100
|
ASC_ERASE_FAILURE SCSISubError = 0x5100
|
||||||
|
|
||||||
/* Key 5: Illegal Request */
|
// Key 5: Illegal Request
|
||||||
ASC_PARAMETER_LIST_LENGTH_ERR SCSISubError = 0x1a00
|
ASC_PARAMETER_LIST_LENGTH_ERR SCSISubError = 0x1a00
|
||||||
ASC_INVALID_OP_CODE SCSISubError = 0x2000
|
ASC_INVALID_OP_CODE SCSISubError = 0x2000
|
||||||
ASC_LBA_OUT_OF_RANGE SCSISubError = 0x2100
|
ASC_LBA_OUT_OF_RANGE SCSISubError = 0x2100
|
||||||
@@ -120,7 +120,7 @@ var (
|
|||||||
ASC_INSUFFICENT_REGISTRATION_RESOURCES SCSISubError = 0x5504
|
ASC_INSUFFICENT_REGISTRATION_RESOURCES SCSISubError = 0x5504
|
||||||
ASC_BAD_MICROCODE_DETECTED SCSISubError = 0x8283
|
ASC_BAD_MICROCODE_DETECTED SCSISubError = 0x8283
|
||||||
|
|
||||||
/* Key 6: Unit Attention */
|
// Key 6: Unit Attention
|
||||||
ASC_NOT_READY_TO_TRANSITION SCSISubError = 0x2800
|
ASC_NOT_READY_TO_TRANSITION SCSISubError = 0x2800
|
||||||
ASC_POWERON_RESET SCSISubError = 0x2900
|
ASC_POWERON_RESET SCSISubError = 0x2900
|
||||||
ASC_I_T_NEXUS_LOSS_OCCURRED SCSISubError = 0x2907
|
ASC_I_T_NEXUS_LOSS_OCCURRED SCSISubError = 0x2907
|
||||||
@@ -134,10 +134,10 @@ var (
|
|||||||
ASC_REPORTED_LUNS_DATA_HAS_CHANGED SCSISubError = 0x3f0e
|
ASC_REPORTED_LUNS_DATA_HAS_CHANGED SCSISubError = 0x3f0e
|
||||||
ASC_FAILURE_PREDICTION_FALSE SCSISubError = 0x5dff
|
ASC_FAILURE_PREDICTION_FALSE SCSISubError = 0x5dff
|
||||||
|
|
||||||
/* Data Protect */
|
// Data Protect
|
||||||
ASC_WRITE_PROTECT SCSISubError = 0x2700
|
ASC_WRITE_PROTECT SCSISubError = 0x2700
|
||||||
ASC_MEDIUM_OVERWRITE_ATTEMPTED SCSISubError = 0x300c
|
ASC_MEDIUM_OVERWRITE_ATTEMPTED SCSISubError = 0x300c
|
||||||
|
|
||||||
/* Miscompare */
|
// Miscompare
|
||||||
ASC_MISCOMPARE_DURING_VERIFY_OPERATION SCSISubError = 0x1d00
|
ASC_MISCOMPARE_DURING_VERIFY_OPERATION SCSISubError = 0x1d00
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -22,10 +22,8 @@ import (
|
|||||||
"github.com/gostor/gotgt/pkg/api"
|
"github.com/gostor/gotgt/pkg/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
// NewSCSILu: create a new SCSI LU
|
||||||
* path format <protocol>:/absolute/file/path
|
// path format <protocol>:/absolute/file/path
|
||||||
*/
|
|
||||||
|
|
||||||
func NewSCSILu(device_uuid uint64, path string, online bool) (*api.SCSILu, error) {
|
func NewSCSILu(device_uuid uint64, path string, online bool) (*api.SCSILu, error) {
|
||||||
|
|
||||||
pathinfo := strings.SplitN(path, ":", 2)
|
pathinfo := strings.SplitN(path, ":", 2)
|
||||||
@@ -60,6 +58,7 @@ func NewSCSILu(device_uuid uint64, path string, online bool) (*api.SCSILu, error
|
|||||||
return lu, nil
|
return lu, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewLUN0: create a new fake SCSI LU
|
||||||
func NewLUN0() *api.SCSILu {
|
func NewLUN0() *api.SCSILu {
|
||||||
|
|
||||||
sbc := NewSBCDevice(api.TYPE_UNKNOWN)
|
sbc := NewSBCDevice(api.TYPE_UNKNOWN)
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ func (sbc SBCSCSIDeviceProtocol) InitLu(lu *api.SCSILu) error {
|
|||||||
lu.Attrs.SenseFormat = false
|
lu.Attrs.SenseFormat = false
|
||||||
lu.Attrs.VendorID = SCSIVendorID
|
lu.Attrs.VendorID = SCSIVendorID
|
||||||
lu.Attrs.ProductID = SCSIProductID
|
lu.Attrs.ProductID = SCSIProductID
|
||||||
lu.Attrs.ProductRev = version.SCSI_VERSION
|
lu.Attrs.ProductRev = version.SCSIVersion
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SCSIID for PAGE83 T10 VENDOR IDENTIFICATION field
|
SCSIID for PAGE83 T10 VENDOR IDENTIFICATION field
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Package util provides some basic util functions.
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2015 The GoStor Authors All rights reserved.
|
Copyright 2016 The GoStor Authors All rights reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@@ -14,9 +14,11 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Package version provides the Version information.
|
||||||
package version
|
package version
|
||||||
|
|
||||||
const (
|
const (
|
||||||
VERSION = "0.1"
|
Version = "0.1"
|
||||||
SCSI_VERSION = "0.1" /* SCSI version string MUST be shorter than 4 characters*/
|
// SCSI version string MUST be shorter than 4 characters
|
||||||
|
SCSIVersion = "0.1"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user